C语言版井字棋
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十五、井字棋
【问题描述】
设计一个井字棋的游戏程序
【基本要求】
游戏规则是:从一个空的棋盘开始,人为x一方,计算机为o一方,人机双方轮流放置棋子,人下的时候,字符x将被放入棋盘中指定的位置,轮到计算机下时,程序将扫描棋盘,并将字符o放入扫描到的第一个空格,某一方有3枚棋子占据了一横行、一竖行或一对角线则获胜,若整个棋盘被占满还没有一方获胜则为和局。
截图:
代码:
//@author GXU-pengcheng #include
#include
#include
void Help();//帮助
int Play(char player,int choice);//对弈
void Init();//初始化棋盘
void Display();//打印棋盘
void Black(int choice);//黑棋
void White(int choice);//白棋
void Block(int choice);//添加选择框
void Clear(int choice);//清空之前的选择框
int Judge(int choice,char symbol);//判断输赢返回值0为无结果,1为获胜,2为平局int Funcx(int choice);//将标号转换为行号
int Funcy(int choice);//将标号转换为列号
void End(char symbol);//结束
int Found();//返回第一个没有棋子的位置的编号
char a[31][64];//用数组存放棋盘和棋子,a[行][列]
int b=0;//棋子个数
int main(){
char player;
int choice;
system("title 井字棋");//设置标题
system("mode con cols=64 lines=35");//设置窗口大小
system("color 70");//设置颜色
while(1){
printf("\n\n\n\n\n\n\t\t\t井\t字\t棋");
printf("\n\n\n\n\n\n\n\n\t\t\t1. 玩家先手\n\n\t\t\t2. 电脑先手\n\n\t\t\t3. 帮助\n\n\t\t\t4. 退出\n\n\n\n\n\t\t请输入: ");
player=getch();
if(player=='1'){
Init();
Block(5);
choice=5;
Play(player,choice);
}else if(player=='2'){
Init();
Play(player,choice);
}else if(player=='3'){
Help();
getch();
system("cls");
continue;
}else if(player=='4'){
return 0;
}else{
printf("\n\n\t\t 输入错误请重新输入!");
Sleep(1000);
system("cls");
continue;
}
}
return 0;
}
void Help(){
system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t 帮助\n\n\n");
printf("\t 'W'上移, 'S'下移, 'A'左移, 'D'右移 \n\n");
printf("\t\t 游戏中按'4'退出");
printf("\n\n\n\n\t\t 按任意键退出");
}
int Play(char player,int choice){//对弈
char get;
char symbol;
int c=0;//Judge得出的结果
while(1){
system("cls");//每次循环清屏一次
Display();
if(player=='1'){//玩家下棋
while(1){//确定要下的位置
if((get=getch())!=' '){
if(get=='4'){
system("cls");
return 0;
}else if( (get=='w'||get=='W') &&choice-3>=1){
Clear(choice);
choice =choice-3;
}else if((get=='s'||get=='S')&&choice+3<=9){
Clear(choice);
choice = choice+3;
}else if((get=='a'||get=='A')&&(choice+2)/3==(choice+1)/3){ Clear(choice);
choice -= 1;
}else if((get=='d'||get=='D')&&(choice-1)/3==choice/3){ Clear(choice);
choice += 1;
}else{
continue;
}
Block(choice);
system("cls");
Display();
}
else{
if(a[((choice-1)/3)*10+2][((choice-1)%3)*21+4]!=' '){ printf("该位置已有其他棋子!");
continue;