三子棋小游戏游戏
2021/5/30 10:53:47
本文主要是介绍三子棋小游戏游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
三子棋结构
- 1.构建菜单
- 2.在主函数中生成选项
- 3.定义宏常量
- 4.游戏函数
- 5.初始化棋盘
- 6.展示棋盘
- 7.判断胜负
- 8.玩家落子
- 9.电脑随机落子
- 10.头文件
- 思路总结:
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
思路总结:
首先我们需要一个菜单这个菜单能根据你的输入决定是要开始游戏还是退出游戏,再是棋盘这一定是一个二维数组的棋盘。再是玩家下棋和电脑下棋最后再是判断输赢。
这篇关于三子棋小游戏游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程