您的位置:首页 > 编程语言 > C语言/C++

c语言实现的三子棋游戏

2017-12-12 19:47 881 查看
game.h

#ifndef __GAME_H__
#define __GAME_H__

#define ROW 3
#define COL 3

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>

void init_board(char arr[ROW][COL], int row, int col);
void display_board(char arr[ROW][COL], int row, int col);
void player_move(char arr[ROW][COL], int row,int col);
void computer_move(char arr[ROW][COL], int row, int col);
char check_win(char arr[ROW][COL], int row, int col);

#endif//__GAME_H__


game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void init_board(char arr[ROW][COL], int row, int col)
{
memset(arr, ' ', row*col*sizeof(char));
}

void display_board(char arr[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
if (i < 2)
printf("---|---|---\n");
}
}

void player_move(char arr[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
printf("玩家走,请输入坐标:\n");
scanf("%d%d", &x, &y);
if (((x > 0) && (x <= row)) && ((y > 0) && (y <= col)))
{
x--;
y--;
if (arr[x][y] == ' ')
{
arr[x][y] = 'x';
break;
}
else
printf("此位置已被占用,请重新输入\n");
}
else
printf("输入坐标有误,请重新输入\n");
}
display_board(arr, ROW, COL);
}

void computer_move(char arr[ROW][COL], int row, int col)
{
printf("电脑走\n");
Sleep(1000);
int x = 0;
int y = 0;
int count = 0;
/*while (1)
{
x = rand() % 3;
y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = '0';
break;
}
}*/
//display_board(arr,row,col);

while (1)
{
int i = 0;
if (count == 0)
{
for (i = 0; i < row; i++)
{
if (((arr[i][0] == arr[i][1]) && (arr[i][0] == 'x')) || ((arr[i][1] == arr[i][2]) && (arr[i][1] == 'x')) || ((arr[i][0] == arr[i][2]) && (arr[i][0] == 'x')))
{
int j = 0;
for (j = 0; j < 3; j++)
{
if (arr[i][j] == ' ')
{
x = i;
y = j;
arr[x][y] = '0';
count = 1;
break;
}
}
}
}
}
if (count == 0)
{
for (i = 0; i < col; i++)
{
if (((arr[0][i] == arr[1][i]) && (arr[0][i] == 'x')) || ((arr[1][i] == arr[2][i]) && (arr[1][i] == 'x')) || ((arr[0][i] == arr[2][i]) && (arr[0][i] == 'x')))
{
int j = 0;
for (j = 0; j < 3; j++)
{
if (arr[j][i] == ' ')
{
x = j;
y = i;
arr[x][y] = '0';
count = 1;
break;
}
}
}
}
}
if (count == 0)
{
if (((arr[0][0] == arr[1][1]) && (arr[0][0] == 'x')) || ((arr[1][1] == arr[2][2]) && (arr[1][1] == 'x')) || ((arr[0][0] == arr[2][2]) && (arr[0][i] == 'x')))
{
int i = 0;
for (i = 0; i < 3; i++)
{
if (arr[i][i] == ' ')
{
x = i;
y = i;
arr[x][y] = '0';
count = 1;
break;
}
}
}
}
if (count == 0)
c134
{
if (((arr[0][2] == arr[1][1]) && (arr[0][2] == 'x')) || ((arr[1][1] == arr[2][0]) && (arr[2][0] == 'x')) || ((arr[0][2] == arr[2][0]) && (arr[2][0] == 'x')))
{
if (arr[0][2] == ' ')
{
arr[0][2] = '0';
count = 1;
}
if (arr[1][1] == ' ')
{
arr[1][1] = '0';
count = 1;
}
if (arr[2][0] == ' ')
{
arr[2][0] = '0';
count = 1;
}
}
}
while (count == 0)
{
x = rand() % 3;
y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = '0';
count = 1;
}
}
display_board(arr, row, col);
break;
}
}
int is_full(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}

char check_win(char arr[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]))&&(arr[i][0] != ' '))
return arr[i][0];
}
for (i = 0; i < col; i++)
{
if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) &&(arr[0][i]!= ' '))
return arr[0][i];
}
if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' '))
return arr[1][1];
if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' '))
return arr[1][1];
if (is_full(arr, row, col))
{
return 'q';
}
return ' ';
}


test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game()
{
char arr[ROW][COL];
int ret = 0;
init_board(arr, ROW, COL);
display_board(arr, ROW, COL);
srand((unsigned int)time(NULL));
while (1)
{
player_move(arr, ROW, COL);
if ((ret = check_win(arr, ROW, COL)) != ' ')
break;
//display_board(arr, ROW, COL);
computer_move(arr, ROW, COL);
if ((ret = check_win(arr, ROW, COL)) != ' ')
break;
//display_board(arr, ROW, COL);
}
if (ret == 'x')
printf("玩家赢!\n");
if (ret == '0')
printf("电脑赢!\n");
if (ret == 'q')
printf("平局\n");
}
void menu()
{
printf("************************\n");
printf("***1.play      0.exit***\n");
printf("************************\n");
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
//printf("开始游戏\n");
game();
break;
default:
break;
}
} while (input);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 游戏