用c语言实现三子棋游戏的编写,首先需要了解三子棋游戏的玩法及构架。从进入游戏,创建棋盘,坐标的表示等等,都需要用c语言来实现具体的操作。玩家输入坐标时将横纵坐标的值限定在大于等于1小于等于3之间(代码中是用数组的下标来表示的,所以是0,1,2),使其坐标不会超出棋盘。两个for循环就可以实现这个过程。判断坐标是否被占用,只需判断输入坐标所对应位置是不是空格‘ ’就行了。
(2)电脑赢:横着、竖着或是斜着连续三个都是电脑的棋子。
(3)平局:在棋盘已经满了的情况下不存在有连续三个棋子属于同一个玩家。
game.c
基本的代码主要框架以及调用函数就是这些了。部分细节需要用户 自行优化,新手上路,大神勿喷!!! 谢谢大家~
由于电脑的输入坐标是随机的,可能会输入非法坐标,就需要重新输入,所以电脑输入应该是一个循环的过程。在循环里边判断,如果是非法坐标,就得重新输入了。为了保证电脑在输入的随机坐标在棋盘内,可以通过将随机数模3(对3取余)的方法来限定下标为0,1,2的三个数中的一个。最后就是判断输赢了。有四种情况(玩家赢、电脑赢、平局、还没有下完)
这样就会有一下几种情况:
(2)电脑赢:横着、竖着或是斜着连续三个都是电脑的棋子。
(3)平局:在棋盘已经满了的情况下不存在有连续三个棋子属于同一个玩家。
(4)还没有下完:任意一个坐标对应的位置存放的是空格‘ ’。
下面为大家提供基本的代码,部分细节请大家自己优化!!!
game.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ROWS3
#define COLS3
void start(char arr[ROWS][COLS],int row,int col);
void display(char arr[ROWS][COLS],int row,int,col);
void complay(char arr[ROWS][COLS],int row,int,col);
void check_win(char arr[ROWS][COLS],int row,int,col);
#endif //_GAME_H_
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void start(char arr[ROWS][COLS],int row, int col)
{
int i = 1;
for(i = 1;i<row;i++)
{
int j = 0;
for(;j<col;j++)
{
arr[i][j] = ' ';
}
}
for(i = 0;i<row;i++)
{
printf("%c| %c| %c\n",arr[i][0],arr[i][1],arr[i][2]);
if(i==2)
{
break;
}
printf("---|---|---\n");
}
}
void display(char arr[ROWS][COLS], int row,int col)
{
int i = 0;
printf("请玩家选择坐标");
do
{
scanf("%d%d",&row,&col);
row--;
col--;
if(arr[row][col]==' ')
{
arr[row][col] = '0';
for(i = 0;i<ROWS,i++)
{
printf("%c|%c|%c\n",arr[i][0],arr[i][2]);
if(i == 2)
{
break;
}
printf("--|--|--|\n");
}
break;
}
}
while(1);
}
void complay(char arr[ROWS][COLS],int row,int col)
{
int i = 0;
printf("电脑选坐标\n");
do
{
row = rand()%3;
col = rand()%3;
if(arr[row][col]==' ')
{
arr[row][col] = 'x';
for(i = 0;i<ROWS;i++)
{
printf("%c|%c|%C\n",arr[i][0],arr[i][1],arr[i][1]);
if(i = 2)
{
break;
}
printf("--|--|--\n");
}
break;
}
}
while(1);
}
int check_win(char arr[ROWS][COLS],int row,int col)
{
int i = 0;
for(;i<ROWS;i++)
{
if((arr[i][0]==arr[i][1])&&arr[i][2] == arr[i][1]&&arr[i][0]!=' ')
{
return 1;
}
}
for(;i<COLS;i++)
{
if((arr[0][i] ==arr[1][i])&&(arr[2][i] == arr[1][i])&&(arr[1][1]) ==' ')
{
return 1;
}
if((arr[0][0] ==arr[1][1])&&(arr[1][1] == arr[0][2])&&(arr[1][1]) ==' ')
{
return 1;
}
if((arr[2][0] ==arr[1][1])&&(arr[1][1] == arr[0][2])&&(arr[1][1]) ==' ')
{
return 1;
}
}
return 0;
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void mus(void)
{
printf("********************\n");
printf("**1.game 2.break**\n");
printf("********************\n");
}
void game (void)
{
int tmp = 0;
int i = 0;
char arr[ROWS][COLS] = {0};
start(arr,ROWS,COLS);
do
{
display(arr,ROWS,COLS);
tmp = check_win(arr,ROWS,COLS);
if(tmp ==1)
{
tmp = 1;
break;
}
i++;
if(i>=9)
{
break;
}
complay(arr,ROWS,COLS);
tmp = check_win(arr,ROWS,COLS);
if(tmp ==1)
{
tmp = 0;
break;
}
i++;
if(i>=9)
{
break;
}
}
while(1);
if (tmp == 1)
{
printf("你赢了\n");
}
else if (tmp == 0)
{
printf("你输了\n");
}
else if(i ==9)
{
printf("平局");
}
}
int main()
{
int input = 0;
do
{
mus();
printf("请选择");
scanf("%d",&input);
if(input ==1)
{
game();
}
else if(input == 0)
{
break;
}
else
{
printf("输入有误\n");
}
}
while(1);
return 0;
}
基本的代码主要框架以及调用函数就是这些了。部分细节需要用户 自行优化,新手上路,大神勿喷!!! 谢谢大家~