本文共 4299 字,大约阅读时间需要 14 分钟。
main
函数int main(){ test(); return 0;}
void test(){ int input = 0; srand((unsigned int)time(NULL));//从程序开始就生成随机数 do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,请重新选择!\n"); break; } } while (input);}
void menu(){ printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf("---- 1.play 0.exi---\n"); printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");}
void game(){ char ret = 0; 数组-存放棋盘的信息。 char board [ROW][COL] = { 0 }; 初始化棋盘,初始化数组。行,列数组传参。 Initboard(board,ROW,COL); 打印棋盘。 Displayboard(board,ROW,COL); 下棋 但凡只要不是继续下的状态就 break,跳出循环。 while (1) { 玩家下棋 Playermove(board, ROW, COL); Displayboard(board, ROW, COL); 判断玩家是否赢 ret=iswin(board, ROW, COL); if (ret != 'C') { break; } 电脑下棋。 computermove(board, ROW, COL); Displayboard(board, ROW, COL); 电脑是否赢 ret=iswin(board, ROW, COL); if (ret != 'C') { break; } } 根据上面的返回 字符 进行判断。 if (ret == '*') { printf("玩家赢\n"); } else if (ret == '#') { printf("电脑赢\n"); } else { printf("平局\n"); }}
#define _CRT_SECURE_NO_WARNINGS 1#define ROW 3 方便更换更大的棋盘#define COL 3#include#include #include 函数的声明。初始化棋盘。void Initboard(char board[ROW][COL],int row,int col);打印棋盘void Displayboard(char board[ROW][COL], int row, int col);玩家下棋。void Playermove(char board[ROW][COL], int row, int col);电脑下棋void computermove(char board[ROW][COL], int row, int col);iswin函数玩家赢, 返回 *电脑赢 返回 #平局 返回Q继续 返回 C 要返回这样的字符所以用char类型char iswin(char board[ROW][COL], int row, int col);
#include"game.h"函数的实现。void Initboard(char board[ROW][COL], int row, int col){ int i = 0; int j = 0; for (i = 0; i < row; i++) { for ( j = 0; j < col; j++) { board[i][j] = ' '; 弄成字符空格 等会儿打印棋盘的时候好看。。 } }}
void Displayboard(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < row; i++) 控制打印几行。 { 1,打印一行的数据。 int j = 0; for (j = 0; j < col; j++) { printf(" %c ", board[i][j]); if (j < col - 1) { printf("|"); } } printf("\n"); 2,打印分割行。 if (i < row - 1) { for ( j = 0; j < col; j++) { { printf("---"); if (j < col - 1) 这里打印 | 是为了 和 一行上面的 | 连接起来 { printf("|"); } } } printf("\n"); } }}
void Playermove(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; printf("玩家走:>"); while (1) { printf("请输入要下的坐标"); 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("该坐标被占用"); } } else { printf("坐标输入非法,请重新输入!\n"); } }}
void computermove(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; printf("电脑走:>\n"); while (1) { x = rand() % row;//生成随机数 y = rand() % col; if (board[x][y] == ' ') { board[x][y] = '#'; break; } }}
返回字符 charchar iswin(char board[ROW][COL], 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[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ') { return board[1][1]; } 要么平局,要么继续 判断是否平局。发现没有人赢,然后棋盘又满了,说明平局。 if (isfull(board, ROW, COL) == 1) 判断满了就返回1 { return 'Q'; } return 'C';}
int isfull(char board[ROW][COL], int row, int col) //返回1表示棋盘满了。返回0表示棋盘美满。{ 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;}
如果感觉海星,请一键三联哦~
转载地址:http://kol.baihongyu.com/