数组应用-三子棋

    xiaoxiao2021-03-25  84

    大家小时候都玩过三子棋,我们那边叫做一条龙,但是如何用C语言实现呢?

    代码的思维逻辑如下:

    1:打印个开始菜单供用户选择

    2:如果选择玩,首先打印棋盘(用二维数组保存棋盘上的9个格子),

    3:用户和电脑分别下棋,每下一次,判断一次是胜负还是平局

    4:上一步结束之后,用户如果还想继续玩可以继续,否则可以退出游戏。

    具体实现请看下面代码,欢迎交流学习!

    game.h

    #ifndef __GAME__H #define __GAME__H #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROWS 3 #define COLS 3 void game(); void display(char a[ROWS][COLS],int ROW,int COL); void player(char a[ROWS][COLS],int ROW,int COL); void computer(char a[ROWS][COLS],int ROW,int COL); char judge(char a[ROWS][COLS],int ROW,int COL); int is_full(char a[ROWS][COLS],int ROW,int COL); #endif

    game.c

    #include"game.h" void display(char a[ROWS][COLS],int ROW,int COL) { int i,j; for(i=0;i<ROWS;i++) { for(j=0;j<COLS;j++) { if(j==COLS-1) printf(" %c ",a[i][j]); else printf(" %c |",a[i][j]); } printf("\n"); if(i==ROWS-1) printf("\n"); else printf("-----------\n"); } } //注意判断电脑和玩家下棋是此位置是否为空,为空可以下 void player(char a[ROWS][COLS],int ROW,int COL) { int x,y; printf("请输入坐标>"); while(1) { scanf("%d %d",&x,&y); if(a[x-1][y-1]==' ') { a[x-1][y-1] = 'X'; break; } else { printf("出错,请重新输入!\n"); } } } //任何数字%3就是0~2 void computer(char a[ROWS][COLS],int ROW,int COL) { while(1) { int x = rand()%3; int y = rand()%3; if(a[x][y]==' ') { a[x][y] ='0'; break; } } } char judge(char a[ROWS][COLS],int ROW,int COL) { int i = 0; for(i=0;i<ROW;i++) { if((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])&&(a[i][0]!=' ')) return a[i][0]; } for(i=0;i<COL;i++) { if((a[0][i]==a[1][i])&&(a[1][i]==a[2][i])&&(a[0][i]!=' ')) return a[0][i]; } if((a[0][0]==a[1][1])&&(a[1][1]==a[2][2])&&(a[0][0]!=' ')) return a[0][0]; if((a[0][2]==a[1][1])&&(a[1][1]==a[2][0])&&(a[0][2]!=' ')) return a[0][2]; if(is_full(a,ROW,COL) == 1) return 'q'; return ' '; } int is_full(char a[ROWS][COLS],int ROW,int COL) { int x = 0; int y = 0; for(x=0;x<ROW;x++) { for(y=0;y<COL;y++) { if(a[x][y]==' ') return 0; } } return 1; } void game() { char a[ROWS][COLS]; char ret = ' '; srand((unsigned int) time(NULL)); memset(a ,' ',ROWS*COLS*sizeof(char)); display(a,ROWS,COLS); do { player(a,ROWS,COLS); display(a,ROWS,COLS); ret = judge(a,ROWS,COLS); if(ret!=' ') { break; } computer(a,ROWS,COLS); display(a,ROWS,COLS); ret = judge(a,ROWS,COLS); }while(ret==' '); if(ret=='X') { printf("玩家赢\n"); } if(ret=='0') { printf("电脑赢\n"); } if(ret=='q') { printf("平局!\n"); } }

    test.c #include"game.h" int main() { int input = 0; do { printf("**************************\n"); printf("***** 1:Start 0:exit *****\n"); printf("**************************\n"); printf("请选择>"); scanf("%d",&input); switch(input) { case 1:game();break; case 0:printf("欢迎再来!\n")break; default:printf("输入错误请重新输入\n");break; } }while(input); return 0; }

    测试如下:

    文件分类

    开始画面

    当玩家赢画面:

    电脑赢:

    平局:

    转载请注明原文地址: https://ju.6miu.com/read-25744.html

    最新回复(0)