主函数
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include"sanziqi.h"
#include"saolei.h"
void init()
{
printf("******************************************\n");
printf("** 1.三子棋 2.扫雷 3.退出 **\n");
printf("******************************************\n");
}
int main()
{
int key = 0;
while(!(key == 3))
{
init();
printf("请选择模式:");
scanf("%d",&key);
switch (key)
{
case 1: sanziqi();break;
case 2: saolei();break;
case 3: break;
default: break;
}
}
system("pause");
return 0;
}
扫雷部分(基础)
头文件 saolei.h
#ifndef __SAOLEI_H_
#define __SAOLEI_H_
#include<stdio.h>
#include<windows.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define easy 10;
#define mid 10;
#define hard 10;
void init_board(char board[ROWS][COLS],int rows,int cols,char ret);
void print_board(char board[ROWS][COLS],int row,int col);
void set_mine(char board[ROWS][COLS],int row,int col);
#endif
扫雷子文件 saolei.c
#include"saolei.h"
int clear_count = 0;
int get_mine(char board[ROWS][COLS],int x,int y)
{
int count = 0;
if(board[x-1][y] == '1')
{
count++;
}
if(board[x+1][y] == '1')
{
count++;
}
if(board[x-1][y+1] == '1')
{
count++;
}
if(board[x+1][y+1] == '1')
{
count++;
}
if(board[x][y+1] == '1')
{
count++;
}
if(board[x-1][y-1] == '1')
{
count++;
}
if(board[x+1][y-1] == '1')
{
count++;
}
if(board[x][y-1] == '1')
{
count++;
}
return count;
}
void clear_mine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
int x = 0;
int y = 0;
while(1)
{
printf("请输入要排查的坐标->:");
scanf("%d%d",&x,&y);
while((mine[x][y]=='1') && (0 == clear_count))//防止第一次炸死
{
init_board(mine,ROWS,COLS,'0');
set_mine(mine,ROW,COL);
if(mine[x][y]=='0')
{
clear_count++;
print_board(mine,ROW,COL);
break;
}
}
if(x>=1 && x<=row && y>=1 && y<=row)
{
if(mine[x][y]=='1')
{
printf("很遗憾炸死了\n");
break;
}
else
{
int count = 0;
count = get_mine(mine,x,y);
show[x][y] = count+'0';
print_board(show,ROW,COL);
}
}
else
{
printf("输入的坐标不合法\n");
}
}
}
void set_mine(char board[ROWS][COLS],int row,int col)
{
int x = 0;
int y = 0;
int count = easy;
while(count)
{
x = rand()%row+1;
y = rand()%col+1;
if(board[x][y] == '0')
{
board[x][y] = '1';
count--;
}
}
}
void print_board(char board[ROWS][COLS],int row,int col)
{
int i = 0;
int j = 0;
for(i = 0; i<=row;i++)
{
printf("%d ",i);
}
printf("\n");
for(i = 1;i<=row;i++)
{
printf("%d ",i);
for(j = 1;j<=col;j++)
{
printf("%c ",board[i][j]);
}
printf("\n");
}
printf("\n");
}
void init_board(char board[ROWS][COLS],int rows,int cols,char ret)
{
int i = 0;
int j = 0;
for(i = 0; i<rows ; i++)
{
for(j = 0; j<cols ; j++)
{
board[i][j] = ret;
}
}
}
void saolei()
{
char mine[ROWS][COLS] = {0};
char show[ROWS][COLS] = {0};
srand((unsigned int)time(NULL));
init_board(mine,ROWS,COLS,'0');
init_board(show,ROWS,COLS,'*');
set_mine(mine,ROW,COL);//设置雷
print_board(mine,ROW,COL);
print_board(show,ROW,COL);
clear_mine(mine,show,ROW,COL);
}
三子棋(基础)
头文件 sanziqi.h
#ifndef __SANZIQI_H__
#define __SANZIQI_H__
#define ROW 3
#define COL 3
#include<stdio.h>
#include<time.h>
#include<windows.h>
void sanziqi();
void qipan(char qizi[ROW][COL],int row,int col);
void play_move(char qizi[ROW][COL],int row,int col);
char check_win(char qizi[ROW][COL],int row,int col);
#endif
三子棋子文件 sanziqi.c
#include"sanziqi.h"
void qipan(char qizi[ROW][COL],int row,int col)
{
int i = 0;
for(i = 0; i<=row-1; i++)
{
printf(" %c | %c | %c \n",qizi[i][0],qizi[i][1],qizi[i][2]);
if( i<row-1)
{
printf("---|---|---\n",qizi[i][0],qizi[i][1],qizi[i][2]);
}
}
}
void play_move(char qizi[ROW][COL],int row,int col)
{
int x = 0;
int y = 0;
while(1)
{
printf("请玩家输入坐标—>:");
scanf("%d%d",&x,&y);
if(x>=1 && x<= row &&y>=1 && y<= col && qizi[x-1][y-1]==0)
{
qizi[x-1][y-1]='X';
break;
}
else
{
printf("坐标输出错误\n");
}
}
}
void computer_move(char qizi[ROW][COL],int row,int col)
{
int re = 0;
int x = 0;
int y = 0;
while(1)
{
x = rand()%row;
y = rand()%col;
if(qizi[x][y]==0)
{
qizi[x][y]='O';
break;
}
}
printf("\n");
}
char check_win(char qizi[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
int count = 0;
for(i = 0;i<row;i++)//行
{
if((qizi[i][0]==qizi[i][1])&&(qizi[i][1]==qizi[i][2])&&qizi[i][1]!=0)
{
return qizi[i][1];
}
}
for(i = 0;i<col;i++)//处理列
{
if((qizi[0][i]==qizi[1][i])&&(qizi[1][i]==qizi[2][i])&&qizi[1][i]!=0)
{
return qizi[1][i];
}
}
if((qizi[0][0]==qizi[1][1])&&(qizi[1][1]==qizi[2][2])&&qizi[1][1]!=0)
{
return qizi[1][1];
}
if((qizi[0][2]==qizi[1][1])&&(qizi[1][1]==qizi[2][0])&&qizi[1][1]!=0)
{
return qizi[1][1];
}
for(i = 0;i<row;i++)
{
for(j = 0;j<row;j++)
{
if(qizi[i][j]!=0)
{
count++;
}
}
}
if(9 ==count)
{
return 9;
}
}
void sanziqi()
{ char win = 0;
char qizi[ROW][COL] = {0};
qipan(qizi,ROW,COL);
srand((unsigned int)time(NULL));
while(1)
{
play_move(qizi,ROW,COL);
qipan(qizi,ROW,COL);
win = check_win(qizi,ROW,COL);
if(win == 'X')
{
printf("玩家胜\n");
break;
}
else if(win == 'O')
{
printf("电脑胜\n");
break;
}
else if(win == 9)
{
printf("平局\n");
break;
}
computer_move(qizi,ROW,COL);
qipan(qizi,ROW,COL);
win = check_win(qizi,ROW,COL);
if(win == 'X')
{
printf("玩家胜\n");
break;
}
else if(win == 'O')
{
printf("电脑胜\n");
break;
}
else if(win == 9)
{
printf("平局\n");
break;
}
}
}