用c语言实现三子棋的游戏
来源:互联网 发布:管理信息系统软件测试 编辑:程序博客网 时间:2024/05/22 00:54
#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<time.h>#define ROWS 3#define COLS 3void menu();void init_board(char arr[][COLS], int x, int y);//初始化棋盘void print_board(char arr[][COLS], int x, int y);//打印棋盘void player_move(char arr[][COLS]);//玩家下棋int check_full(char arr[][COLS], int x, int y);//判断棋盘是否已满void computer_move(char arr[][COLS]);//电脑下棋char check_win(char arr[][COLS], int x, int y);//判断谁赢
#include"three_chess.h"void menu(){ printf("****************\n"); printf("****1.play******\n"); printf("****0.exit******\n"); printf("****************\n");}void init_board(char arr[][COLS], int x, int y)//传数组时一般要把数组的下标也传进来{ int i = 0; int j = 0; for (i=0; i<x; i++) { for (j=0; j<y;j++) { arr[i][j] = ' ';//将二维数组初始化为空格 } }}void print_board(char arr[][COLS], int x, int y){ int i = 0; int j = 0; for (i=0; i<x; i++) { printf("%c |%c |%c\n",arr[i][0],arr[i][1],arr[i][2]); if (i<2) //一共打印三行棋盘,则在打印第三行时不打印下边的横线 { printf("--|--|--\n"); } }}void player_move(char arr[][COLS]){ int x = 0; int y = 0; while(1) { printf("请输入你要下的坐标>"); scanf("%d %d",&x,&y); x--;//数组元素的下标是从0开始,所以需要减一 y--; if(arr[x][y] == ' ')//如果这个下标下的元素为空格,则将p赋给这个元素 { arr[x][y] = 'p'; break;//跳出循环 } else { printf("你输入的下标已被占,请重新输入\n>"); continue;//跳出本次循环 } }}int check_full(char arr[][COLS], int x, int y){ int i = 0; int j = 0; for (i=0; i<x; i++) { for (j=0; j<y; j++) { if (arr[i][j] == ' ')//判断数组中有没有空格,如果出现一次空格,就已经可以证明数组没满 { return 0; } } } return 1;//如果程序可以执行到这里,说明数组已经满了,则返回0}void computer_move(char arr[][COLS]){ srand((unsigned int)time(NULL));//为了每次产生不同的随机数 while (1) { int x = rand()%3;//产生一个小于3的数 int y = rand()%3; if (check_full(arr, ROWS, COLS) == 0)//判断棋盘是否已经满了 { if (arr[x][y] == ' ')//判断这个元素是否为空 { arr[x][y] = 'c';//如果为空,则赋c给这个元素 break;//跳出这层循环 } else { continue;//继续执行下一次的循环 } } }}char check_win(char arr[][COLS], int x, int y){ int i = 0; if (check_full(arr, ROWS, COLS) == 1)//如果棋盘满了,则返回q { return 'q'; } for (i=0; i<x; i++) { if((arr[i][0] == arr[i][1]) && arr[i][1] == arr[i][2]) { return arr[i][0];//返回三个元素中的任一个元素 } } for (i=0; i<y; i++) { if ((arr[0][i] == arr[1][i]) && arr[1][i] == arr[2][i]) { return arr[1][i]; } } if ((arr[0][0] == arr[1][1]) && arr[1][1] == arr[2][2]) { return arr[0][0]; } if ((arr[0][2] == arr[1][1]) && arr[1][1] == arr[2][0]) { return arr[1][1]; } return ' ';//如果没有判断出谁赢并且棋盘还没满,则继续进行游戏}
#include"three_chess.h"void game()//游戏开始{ char ret = 0; char arr[ROWS][COLS]; init_board(arr, ROWS, COLS);//初始化棋盘 print_board(arr, ROWS, COLS);//打印棋盘 do { player_move(arr);//玩家先走 print_board(arr,ROWS, COLS);//打印出棋盘 if (check_win(arr, ROWS, COLS) != ' ')//如果棋盘不为空的话,就跳出循环 { break; } printf("电脑下:\n"); computer_move(arr);//否则电脑下棋 print_board(arr,ROWS,COLS);//把电脑下过后的棋盘打印出来 ret = check_win(arr, ROWS, COLS);//将判断输赢后的返回值保存起来 } while (ret == ' ');//如果棋盘没有满,同时也没有判断出输赢的话,继续执行循环,否则跳出循环 if(check_win(arr, ROWS, COLS) == 'p')//如果判断输赢的返回值为玩家下的字符则就能判断出玩家赢 { printf("玩家赢\n"); } else if(check_win(arr, ROWS, COLS) == 'c')//如果判断输赢的返回值为c,则可以判断电脑赢 { printf("电脑赢\n"); } else { if(check_win(arr, ROWS, COLS) == 'q')//如果棋盘下满了,即就是返回值为q的时候,则可以判断为平局 printf("平局\n"); }}int main(){ int choose = 0; do { menu(); printf("请选择>"); scanf("%d",&choose); switch (choose) { case 0: exit(1); case 1: game(); } } while(choose);}
玩游戏的结果(玩家赢):
电脑赢:
0 0
- 用c语言实现三子棋的游戏
- 【C语言】用C语言实现三子棋游戏的编写
- C语言~三子棋游戏的实现
- c语言实现的三子棋游戏
- 用C语言实现的打字游戏
- 用c语言实现的扫雷游戏
- 用c语言实现简单三子棋游戏
- 用c语言简单实现三子棋游戏
- 【C语言】用C语言实现三子棋游戏
- C语言实现三子棋游戏
- C语言实现三子棋游戏
- C语言实现三子棋游戏
- 一个简单的三子棋游戏(c语言实现)
- 用C语言实现“智障”的棋盘游戏
- 24点游戏 c语言的实现
- 贪吃蛇游戏的C语言实现
- 扫雷游戏的C语言实现
- 基于C语言实现的扫雷游戏
- 控制结构
- Twins
- 电源设计调试过程中的异常现象介绍
- eclipse
- ANSI C (3) —— 常用系统函数
- 用c语言实现三子棋的游戏
- bash基础知识
- 51nod 1640 天气晴朗的魔法 By Assassin
- Word Capitalization
- 手机上设置图片需要注意的问题
- 知识杂选
- js播放图片序列帧
- 二叉树的实现
- 【Linux4.1.12源码分析】协议栈gro收包之VXLAN处理