三子棋小游戏(新手必看)
2017-04-23 14:00
323 查看
头文件
game.h
test.c
game.c
game.h
#ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include<time.h> #include <stdlib.h> #include <string.h> #define ROWS 3 #define COLS 3 void init_board(char board[ROWS][COLS], int row, int col); void display_board(char board[ROWS][COLS], int row, int col); void player_move(char board[ROWS][COLS], int row, int col); void computer_move(char board[ROWS][COLS], int row, int col); char check_win(char board[ROWS][COLS], int row, int col); #endif //__GAME_H__
test.c
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include"game.h" void game() { char board[ROWS][COLS] = {0}; int ret = 0; init_board(board,ROWS, COLS);//初始化棋盘 display_board(board,ROWS, COLS);//打印棋盘 //srand((unsigned int)time(NULL)); //产生一个随机值 while(1) { player_move(board, ROWS, COLS);//玩家下 if ((ret = check_win(board,ROWS,COLS)) != ' ') //若所下坐标不为空,则跳出重新打印 break; display_board(board,ROWS, COLS); computer_move(board, ROWS, COLS); if ((ret = check_win(board,ROWS,COLS)) != ' ')//若所下坐标不为空,跳出重新打印 break; display_board(board, ROWS, COLS); } if(ret == 'X')//check_win函数的返回值是“X” { printf("玩家赢\n"); } else if(ret == '$')//... { printf("电脑赢\n"); } else if(ret == 'q')//... { printf("平局\n"); } display_board(board, ROWS,COLS);//返回值是' '重新打印 } void menu()//打印菜单 { printf("**********************\n"); printf("**** 1.play 0.exit ***\n"); printf("**********************\n"); } void test() { int input = 0; srand((unsigned int)time(NULL));//产生一个随机值 do { menu(); printf("请选择:>"); scanf("%d", &input); switch(input)//玩家输入选择开始游戏 { case 1: game(); break; case 0: break; default://输入除0 1外其他无效选项,打印提示信息 printf("输入错误\n"); break; } } while(input); } int main() { test(); return 0; }
game.c
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include"game.h" void init_board(char board[ROWS][COLS], int row, int col)//初始化棋盘函数 { memset(board,' ',row*col*sizeof(char)); } void display_board(char board[ROWS][COLS], 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]); if(i!=2) printf("---|---|---\n"); } } void player_move(char board[ROWS][COLS], int row, int col)//玩家下 { int x = 0; int y = 0; while(1) { printf("请输入坐标:>"); scanf("%d%d",&x,&y); x--; y--; if(((x>=0)&&(x<=2))&&((y>=0)&&(y<=2)))//判断输入坐标是否合理 { if(board[x][y] == ' ')//判断所下位置是否已经下过 { { board[x][y] = 'X'; break; } } else { printf("坐标错误,重新输入\n"); } } else { printf("坐标错误,重新输入\n"); } } } void computer_move(char board[ROWS][COLS], int row, int col)//电脑下 { int x = 0; int y = 0; while(1) { x = rand()%3; y = rand()%3; if(board[x][y]==' ') { board[x][y] = '$'; break; } } } static int is_full(char board[ROWS][COLS], int row, int col)//判断棋盘是否已经下满 { int i = 0; int j = 0; for(i=0; i<row; i++) for(j=0; j<col; j++) { if(board[i][j]==' ') return 0; } return 1; } char check_win(char board[ROWS][COLS], int row, int col)//判断输赢 { int i = 0; for(i=0; i<row; i++)//同行的三个相同 { if((board[i][0]==board[i][1])&& (board[i][1]==board[i][2])&& (board[i][1]!=' ')) return board[i][1]; } for(i=0; i<col; i++)//同列的三个相同 { if((board[0][i]==board[1][i])&& (board[1][i]==board[2][i])&& (board[1][i]!=' ')) return board[1][i]; } if((board[0][0]==board[1][1])&& (board[1][1]==board[2][2])&& (board[1][1]!=' '))//对角线三个相同 return board[1][1]; if((board[0][2]==board[1][1])&& (board[1][1]==board[2][0])&& (board[1][1]!=' '))//对角线三个相同 return board[1][1]; if (is_full(board,row,col)) { return 'q'; } return ' '; }
相关文章推荐
- JSON-lib基本使用说明(新手必看)
- java新手必看的整套学习体系 让你少走弯路快速进入状态记得收藏
- ubuntu常见问题指南 新手发问前必看 08/03/27 更新
- [收藏]网上交易支付新手必看,最详细国内各银行收费情况及到帐情况
- Java新手入门必看的30个问题
- 一些成功人士的心得(新手必看)
- ECMAScript6 快速上手(新手必看)
- Java正则表达式入门基础篇(新手必看)
- echarts入门新手必看
- oralce 基础知识 ,oralce 常用简单sql语句,oracle 新手必看之一
- swift-新手必看的基础部分
- Java FAQ(新手必看)
- [原创翻译][新手必看]在何时该用什么方式编译WinCE
- IOS-上架APP之启动页设置(新手必看!)
- [转]用ROS创建PPPoE拨号上网-新手必看
- 【新手必看】用EVEREST Ultimate Edition来生成硬件报告
- 网站建设十大忠告,新手建站必看
- 嵌入式Linux基础知识3(嵌入式Linux开发入门的6个步骤 新手必看)
- 新学的三子棋小游戏
- Linux SSH命令大全,新手必看SSH命令