三子棋 用c语言实现
2019-05-18 21:44
162 查看
问题描述
三子棋就是双方落棋子,直到其中一方所落棋子行,列或者对角线连成一条线。或者棋下满,这一种情况是平局。
问题分析
三子棋就是和计算机你一步我一步来实现。首先,得先制作一个菜单提示用户玩还是退出,这里用switch语句较为合适一些
我们使用几个标记,X表示人下的棋子,O表示计算机下的棋子 ,N表示继续下,E表示平局。
而接下来就是游戏整体部分的实现,首先得创建一个棋盘并且初始化,这里定义一个函数IintBoard()来实现,接下来就是展示棋盘,自定义一个ShowBoard()函数来实现。然后就是下棋,这里我们让人先来下,自定义一个函数playpeople(),人下完之后应该再展示一下棋盘,再ShowBoard()。接着就是判断当前这步走完之后是赢还是继续又或者是平局。判断完人之后就是电脑来下,我们使用playcomputer()来实现,之后再判断一次。最后就是判断返回值究竟是人或者计算机赢,还是平局。
#include<stdio.h> #include<time.h> #define ROW 3 #define COL 3 void InitBoard(char board[][COL],int row,int col) { int i=0; for(i=0;i<row;i++){ int j=0; for(j=0;j<col;j++) { board[i][j]=' '; } } } void ShowBoard(char board[][COL],int row,int col) { int i=0; for(i=0;i<row;i++) { printf("%c |%c |%c \n",board[i][0],board[i][1],board[i][2]); } } void playpeople(char board[][COL],int row,int col) { while(1) { int x=0; int y=0; printf(" please enter <x,y>"); scanf("%d %d",&x,&y); if(x>=1&&x<=3&&y>=1&&y<=3) { if(board[x-1][y-1]=' ') { board[x-1][y-1]='X'; break; } else printf("please try again"); } } } int GetRandom(int start,int end) { return rand()%end+1; } int is_full(char board[][col],int row,int col) { int i=0; for(i=0;i<row;i++){ int j=0; for(j=0;j<col;j++) { if(a[i][j])==' ') { return 0; } } return 1; } char JudgeBoard(char board[][COL],int row,int col) { int i=0; for(i=0;i<row;i++) // 判断行 { if(a[i][0]==a[i][1]==a[i][2]) { return a[i][0]; } } for(i=0;i<col;i++) { if(a[0][i]==a[1][i]==a[2][i]) //判断列 { return a[0][i]; } } if(a[0][0]==a[1][1]]==a[2][2]) //判断主对角线 { return a[0][0]; } if(a[0][1]==a[1][1]==a[2][0]) //判断另一个对角线 { return a[0][1]; } if(is_full(a)) //判断棋盘是否下满 { return 'E'; } else return 'N '; //以上情况都不是继续下棋 } void playcomputer(char board[][COL],int row,int col) { while(1) { int x=GetRandom(1,3); int y=GetRandom(1,3); if(board[x-1][y-1]=' ') { board[x-1][y-1]='O'; break; } } } void game() { char result='\0'; //用来记录返回值 char board=[ROW][COL]; InitBoard(board,ROW,COL); ShowBoard(board,ROW,COL); srand((unsigned int )time(NULL)); while(1){ playpeople(board,ROW,COL); ShowBoard(board,ROW,COL); result=Judge(board,ROW,COL); if(result!='N') { break; } playcomputer(board,ROW,COL); ShowBoard(board,ROW,COL); result=Judge(board,ROW,COL); if(result!='N') { break; } } switch(result) { case'X': printf("you is a winner!"); break; case'O': printf("computer win!"); break; case'E': printf(" equal"); break; default: printf("a bug"); break; } } void ShowMenu() { printf("********************************"); printf("********************************"); printf("******1.play 2.exit***********"); printf("********************************"); printf("********************************"); } int main() { int select=0; int flag=0; while(!flag) { ShowMenu(); scanf("%d",&select); switch(select){ case 1: game(); break; case 2: printf("bye bye"); flag=1; break; default: printf("please enter again"); break; } } return 0; }