为了使我的三子棋小游戏代码看起来更加清晰,所以我采用了多文件形式将代码分开,分别是chess.h/main.c/chess.c这三个文件。 2.main.c 3.chess.c 初始化棋盘 打印出所需棋盘,三行三列。 玩家和电脑分别下棋: 这是玩家和电脑各走一次的情况: 这是一个玩家赢了的情况 以上就是三子棋游戏所有代码展示,欢迎大家批评.
1.头文件chess.h
用来存放头文件,宏定义和函数声明,代码如下:#ifndef _CHESS_H_ #define _CHESS_H_ #include <stdio.h> #include <time.h> #include <stdlib.h> #include <Windows.h> #define ROW 3 #define COL 3 #define BLACK_PIECE 'X' #define WHITE_PIECE 'O' void Game(); void Menu(); void InitBoard(char board[][COL], int row, int col); void ShowBoard(char board[][COL], int row, int col); int PlayerMove(char board[][COL], int row, int col); char JudgeResult(char board[][COL], int row, int col); void ComputerMove(char board[][COL], int row, int col); #endif
打印出菜单,输入1,开始游戏,输入2,则退出游戏,输入其他数字,显示输入错误!如下图:
代码如下:#include "chess.h" void Menu() { printf( "************************n"); //打印菜单 printf( "*欢迎来到我的三子棋游戏室:*n"); printf( "************************n"); //打印菜单 printf( "* 1. Play 2. Exit *n"); printf( "******* *******n"); printf( "************************n"); printf( "Please Enter Select:> "); } int main() { int quit = 0; while (!quit){ int select = 0; Menu(); scanf("%d",&select); switch(select){ case 1: Game(); break; case 2: quit = 1; break; default: printf("Enter Error!n"); break; } } system("pause"); return 0; }
函数实现部分:
函数实现部分先加上它对应的头文件#include "chess.h"
void InitBoard(char board[][COL], int row, int col) { int i = 0; for (; i < row; i++){ int j = 0; for (; j < col; j++){ board[i][j] = ' '; } } }
void ShowBoard(char board[][COL], int row, int col) { int i=0; printf(" | 1 | 2 | 3 |n"); for (; i < row; i++) { printf("--------------------n"); printf(" %d | %c | %c | %c |n", i+1, board[i][0], board[i][1], board[i][2]);//i+1为了显示出的序号符合习惯 } printf("-------------------n"); }
玩家选择任意一个没有被占用的格子它对应的输入坐标,该格子内就被填入玩家的游戏字符X。
电脑用rand函数取一个随机值%row或col就可以得到电脑落子的坐标,与坐标相对应的格子就被填入字符0。int PlayerMove(char board[][COL], int row, int col) { int x = 0; int y = 0; printf("Please Enter Your Pos<x,y>*"); scanf("%d %d", &x, &y); if (x>=1 && x<=3 && y>=1 && y<=3){ if(board[x-1][y-1] !=' '){ return 2; } board[x-1][y-1] = BLACK_PIECE; return 0; } return 1; } void ComputerMove(char board[][COL], int row, int col) { while(1){ int i = rand() % row; int j = rand() % col; if(board[i][j] == ' '){ board[i][j] = WHITE_PIECE; break; } } printf("Computer ... Donen"); Sleep(500); }
判断输赢:玩家赢,电脑赢或者平局
如果下棋过程中出现某一行、某一列或者某个斜对角的3个字符相同,则返回对应的字符,根据字符就可判断出输赢情况;如果没有任何一方赢,且棋盘上有空位置,则返回’N’,游戏继续;如果9个格子都被填满也没有任何一方赢,则返回’E’,表示平局。//用户赢了 BLACK_PIECE //电脑赢了 WHITE_PIECE //平局,'E' //next, 'N' char JudgeResult(char board[][COL], int row, int col) { int i = 0; for (; i < row; i++){ if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]){ return board[i][0] ; } } for(i = 0; i < col; i++){ if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]){ return board[0][i]; } } if(board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]){ return board[0][0]; } if(board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]){ return board[1][1]; } //平局,'E' for(i = 0; i < row;i++){ int j = 0; for (; j < col; j++){ if(board[i][j] == ' '){ return 'N'; } } } return 'E'; }
Game()
Game函数将以上所有函数整合起来,串起了整个游戏。首先初始化棋盘,然后向玩家和电脑展示出棋盘,玩家落子后,判断游戏情况,电脑落子后,再次判断游戏情况,循环直到游戏结束,打印出游戏结果。void Game() { char board[ROW][COL]; char result = 'N'; InitBoard(board, ROW,COL); srand((unsigned long)time(NULL)); while(1){ int type = PlayerMove(board,ROW, COL); ShowBoard(board, ROW,COL); if (1== type){ printf("你输入的坐标有误,请重新输入!n"); continue; } else if (2 == type){ printf("你输入的坐标已被占用,请重新输入!n"); continue; } else { printf("Player ... Done!n"); } result = JudgeResult(board, ROW,COL); if (result != 'N'){ break; } ComputerMove(board, ROW,COL); result = JudgeResult(board, ROW,COL); if(result != 'N'){ break; } } ShowBoard(board, ROW,COL); //赢了?输了?平局? switch (result){ case 'E': printf("恭喜你,你和电脑打了个平手!n"); break; case BLACK_PIECE: printf("恭喜你,你赢了!n"); break; case WHITE_PIECE: printf("sorry,电脑赢了!n"); break; default: //bug!! break; } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算