基于C语言实现三子棋游戏的代码怎么写

来源:互联网转载和整理 2024-04-30 08:44:40

游戏代码怎么写

1.创建文件

test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明)

game.c 和game.h属于游戏实现 test.c属于游戏测试

test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(头文件添加)

三个文件

2.首先在test.c文件写一个主函数,主函数里面有一个测试函数,测试函数里面写菜单、进入游戏、退出游戏

代码展示:

voidmenu(){printf("***************************\n");printf("********1.play********\n");printf("********0.exit********\n");printf("***************************\n");}voidtest(){intinput=0;do{menu();printf("请选择:->");scanf("%d",&input);switch(input){case1:printf("三子棋\n");break;case0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}}while(input);}#include<stdio.h>intmain(){test();return0;}

注意:

(1)一般用do while (游戏可能会玩很多次,最少一次)

(2)先打印一个菜单

(3)switch语句,要记得break,要记得default

接下来 把printf("三子棋\n") 改成 game(); 然后开始写游戏部分。

3.三子棋代码

思路:(\n 不要忘记写)

(1)棋盘用数组

(2)假设玩家走用' * ',电脑走用' # ',所以用字符类型的数组(3*3的)

row 中文意思是行 column 中文意思是列 init 英文最初的简写

引用自己写的文件 把#include < >改成 #include " "

(3)棋盘初始化

函数的声明在头文件里

(4)打印棋盘 (打印数据、分割行),把数据行和分割行看做一大部分,最后一部分没有分割行而已。

(5)玩家下棋,打印棋盘,电脑下棋,打印棋盘。

(6)每下一步棋后,会有四种结果 玩家赢,电脑赢,平局,继续玩 。所以要进行判断。

玩家赢 &lsquo;*&rsquo;,电脑赢&lsquo;#&rsquo;,平局&lsquo;Q&rsquo;,继续 &lsquo;C&rsquo;

game.h 部分代码展示

#pragmaonce#include<stdio.h>#include<time.h>#include<stdlib.h>#defineROW3#defineCOL3//初始化棋盘voidInitboard(charboard[ROW][COL],introw,intcol);//define定义的ROW,COL是常量,而这里的row,col都是变量,所以不能替代voidDisplayboard(charboard[ROW][COL],introw,intcol);//打印棋盘voidplayer_move(charboard[ROW][COL],introw,intcol);//玩家下棋voidcomputer_move(charboard[ROW][COL],introw,intcol);//电脑下棋charis_win(charboard[ROW][COL],introw,intcol);//判断输赢以及平局和继续玩

game.c代码展示

#include"game.h"voidInitboard(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i<row;i++){for(j=0;j<col;j++){board[i][j]='';}}}voidDisplayboard(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i<row;i++){//打印数据//printf("%c|%c|%c\n",board[i][0],board[i][1],board[i][2]);//固定的数字0,1,2会把棋盘给固定住,所以不能这样写for(j=0;j<col;j++){printf("%c",board[i][j]);if(j<col-1)printf("|");}printf("\n");//打印分割行if(i<row-1){for(j=0;j<col;j++){printf("---");if(j<col-1){printf("|");}}printf("\n");}}}intis_full(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i<row;i++){for(j=0;j<col;j++){if(board[i][j]==''){return0;}}}return1;}voidplayer_move(charboard[ROW][COL],introw,intcol){intx=0;inty=0;printf("请输入坐标:->");while(1){scanf("%d%d",&x,&y);//判断坐标是否在棋盘范围if((x>=1&&x<=row)&&(y>=1&&y<=col)){if(board[x-1][y-1]==''){board[x-1][y-1]='*';break;}else{printf("该坐标被占用,请重新输入!\n");}}else{printf("坐标非法\n");}}}//电脑下棋voidcomputer_move(charboard[ROW][COL],introw,intcol){intx=0;inty=0;printf("电脑下棋\n");while(1){x=rand()%row;y=rand()%col;if(board[x][y]==''){board[x][y]='#';break;}}}//判断每一步棋后是输赢,还是平局,还是继续玩charis_win(charboard[ROW][COL],introw,intcol){inti=0;for(i=0;i<row;i++){if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][0]!=''){returnboard[i][0];}}for(i=0;i<col;i++){if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]&&board[0][i]!=''){returnboard[0][i];}}if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=''){returnboard[0][0];}if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=''){returnboard[1][1];}inta=is_full(board,row,col);if(1==a){return'Q';}return'C';}

test.c 部分代码展示

#include"game.h"voidmenu(){printf("***************************\n");printf("********1.play********\n");printf("********0.exit********\n");printf("***************************\n");}voidgame(){charboard[ROW][COL]={0};Initboard(board,ROW,COL);//棋盘初始化,内容为空格Displayboard(board,ROW,COL);//打印棋盘charret=0;//下棋while(1){player_move(board,ROW,COL);Displayboard(board,ROW,COL);ret=is_win(board,ROW,COL);if(ret!='C'){break;}computer_move(board,ROW,COL);Displayboard(board,ROW,COL);ret=is_win(board,ROW,COL);if(ret!='C'){break;}}if(ret=='*'){printf("恭喜你,取得胜利!\n");}elseif(ret=='Q'){printf("平局\n");}else{printf("你输了\n");}}voidtest(){intinput=0;srand((unsignedint)time(NULL));do{menu();printf("请选择:->");scanf("%d",&input);switch(input){case1:game();break;case0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}}while(input);}intmain(){test();return0;}