三子棋小游戏游戏
Posted 任我驰骋°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三子棋小游戏游戏相关的知识,希望对你有一定的参考价值。
1.构建菜单
void Menu()
{
printf("|--------------------------------|\\n");
printf("|1.ThreeChess 0.Exit |\\n");
printf("|--------------------------------|\\n");
}
也可以添加2,3,4…选项添加更多游戏选项。
有了菜单我们还需要一个棋盘,但这个棋盘是用一个二维数组实现的但是这个二位数组我们该用什么实现呢?经过我多次思考决定用字符型比较好,我们分别用O表示玩家的棋子,X表示电脑的棋子。我们创建了一个函数得初始化,初始化我决定封装成函数,来提升代码的可读性。
2.在主函数中生成选项
int main()
{
int select = 0;
int quit = 0;
while (!quit){ //输入错误数字不能退出
Menu();
printf("Please Select# ");
scanf("%d", &select);
switch (select){
case 1:
Game();
break;
case 0:
quit = 1;
break;
default:
printf("Enter Error, Try Again!\\n");
break;
}
}
printf("ByeBye!\\n");
system("pause");
return 0;
}
3.定义宏常量
#define ROW 3
#define COL 3
#define INIT ' ' //此处表示空格
#define BLACK 'X'
#define WHITE 'O' //表示人和电脑棋子
#define DRAW 'D' //此为平局
#define NEXT 'N' //若棋子落盘正确进入下一步
4.游戏函数
void Game()
{
char board[ROW][COL];
InitBoard(board,ROW,COL); //初始化棋盘
srand((unsigned long)time(NULL));//生成随机数让电脑落子
char result=0;
while(1)
{
ShowBoard(board,ROW,COL); //展示棋盘
PlayerMove(board,ROW,COL); //人下棋
result =IsEnd(board,ROW,COL);
if(result!=NEXT){ //判断胜负
break;
}
ShowBoard(board,ROW,COL);
ComputerMove(board,ROW,COL);
result=IsEnd(board,ROW,COL); //电脑落子
if(result!=NEXT){
break;
}
}
ShowBoard(board,ROW,COL); //游戏结束再展示棋盘
switch (result){
case WHITE:
printf("You Win!\\n");
break;
case BLACK:
printf("You Lose!\\n");
break;
case DRAW:
printf("You == Computer!\\n");
break;
default:
printf("BUG!\\n"); //Do Nothing!
break;
}
}
5.初始化棋盘
void InitBoard(char board[][COL],int row,int col)
{
int i,j;
for (i = 0; i < row; i++){
for (j = 0; j < col; j++){
board[i][j] = INIT;
}
}
}
这里将棋盘全设置为空白
6.展示棋盘
void ShowBoard(char board[][COL],int row,int col)
{
int i,j;
system("cls");
printf(" ");
for (i = 0; i < col; i++){
printf("%4d", i+1);
}
printf("\\n--------------\\n");
for (i = 0; i < row; i++){
printf("%-2d", i+1); //2
for (j = 0; j < col; j++){
printf("| %c ", board[i][j]); //12
}
printf("\\n--------------\\n");
}
}
游戏开始时第一次展示棋盘
7.判断胜负
char IsEnd(char board[][COL], int row, int col)
{
int i,j;
for (i = 0; i < row; i++){
if (board[i][0] == board[i][1] && \\ //这里‘\\’表示续行
board[i][1] == board[i][2] && \\
board[i][0] != INIT){
return board[i][0];
}
}
for (j = 0; j < COL; j++){
if (board[0][j] == board[1][j] && \\
board[1][j] == board[2][j] && \\
board[0][j] != INIT){
return board[0][j];
}
}
if (board[0][0] == board[1][1] && \\
board[1][1] == board[2][2] && \\
board[1][1] != INIT){
return board[1][1];
}
if (board[0][2] == board[1][1] && \\
board[1][1] == board[2][0] && \\
board[1][1] != INIT){
return board[1][1];
}
for (i = 0; i < row; i++){
for (j = 0; j < col; j++){
if (board[i][j] == INIT){
return NEXT;
}
}
}
return DRAW; //若以上情况都不是,则判为平局
}
若最终无胜负则判为平局
8.玩家落子
void PlayerMove(char board[][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1){
printf("Please Enter Postion<x,y># ");
scanf("%d %d", &x, &y);
if (x < 1 || y < 1 || x > 3 || y > 3){ //判断落子是否合法
printf("Enter Postion Error!\\n");
continue;
}
if (board[x - 1][y - 1] == INIT){ //若此处无子,则在此处落子
board[x - 1][y - 1] = WHITE;
break;
}
else{
printf("Postion Is Not Empty!\\n");
}
}
}
9.电脑随机落子
void ComputerMove(char board[][COL], int row, int col)
{
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == INIT){
board[x][y] = BLACK;
break;
}
}
}
10.头文件
#ifndef __GAME_H__
#define __GAME_H__
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#define ROW 3
#define COL 3
#define INIT ' '
#define WHITE 'X' //Player
#define BLACK 'O' //Computer
#define DRAW 'D'
#define NEXT 'N'
#pragma warning(disable:4996)
extern void Game();
#endif
思路总结:
首先我们需要一个菜单这个菜单能根据你的输入决定是要开始游戏还是退出游戏,再是棋盘这一定是一个二维数组的棋盘。再是玩家下棋和电脑下棋最后再是判断输赢。
以上是关于三子棋小游戏游戏的主要内容,如果未能解决你的问题,请参考以下文章