井字游戏编程
Tic Tac Toe Programming
我是c++编程新手。我正在为井字游戏编写代码,以了解其算法是如何工作的。我的问题是关于我有两个函数。其中一个是clearBoard函数另一个是drawBoard函数。我得到的帮助很少,但我不知道这些函数是怎么工作的。谁能给我解释一下到底什么是什么?我一直在试图解决它,理解它,但我觉得我更困惑了。这可能是小菜一碟,但我真的想知道到底发生了什么。感谢您的时间和关注……
这里是clearBoard函数:
void clearBoard(int board[])
{
int i;
for(i = 0; i < board_size; i++) {
board[i] = -i - 1;
}
}
这是我的drawBoard函数
void drawBoard(int board[])
{
int i, j;
int n = 0;
for(i = 0; i <= 6; i = i+3) {
for(j = 0; j < 3; ++j) {
if(board[i + j] == 2)
cout << "|X|";
else if(board[i + j] == 1)
cout << "|O|";
else
cout << "|" << n << "|";
n = n+1;
}
cout << endl;
}
}
这是我的main.cpp文件。我只是想张贴我的整个工作,至少它会更容易看到完整的图片。
#include <iostream>
#include <ctime>
#include<cstdlib>
#include "Define.h"
using namespace std;
int main()
{
int board[board_size];
int turn = 0;
int p = 0;
int move = 10;
srand(time(NULL));
clearBoard(board);
cout << "This turn is randomly chosen!" << endl;
p = random(2) + 1;
cout << "The first move goes to Player: " << p << endl;
turn = p;
do {
if(p== 2 && 2 == turn)
{
drawBoard(board);
move = getPlayerMove(turn);
}
else
move = makeRandMove(turn);
} while(!isMoveValid(board, move));
board[move] = turn;
while(!isWin(board, move)){
drawBoard(board);
if(2 == turn)
turn = 1;
else
turn = 2;
do {
if(2 == turn)
move = getPlayerMove(turn);
else
move = makeRandMove(turn);
} while(!isMoveValid(board, move));
board[move] = turn;
}
drawBoard(board);
cout << "Player " << turn << " wins." << endl;
return 0;
}
这是functions.cpp文件,里面有我上面提到的函数。
#include <iostream>
#include<cstdlib>
using namespace std;
const int board_size = 9;
void clearBoard(int board[])
{
int i;
for(i = 0; i < board_size; i++) {
board[i] = -i - 1;
}
}
int random(int x)
{
return rand() % x;
}
void drawBoard(int board[])
{
int i, j;
int n = 0;
for(i = 0; i <= 6; i = i+3) {
for(j = 0; j < 3; ++j) {
if(board[i + j] == 2)
cout << "|X|";
else if(board[i + j] == 1)
cout << "|O|";
else
cout << "|" << n << "|";
n = n+1;
}
cout << endl;
}
}
int getPlayerMove(int player)
{
int move;
cout << "Player " << player << " enter move: ";
cin >> move;
return move;
}
int makeRandMove(int player)
{
cout << "Computer (player " << player << ") moving." << endl;
return rand() % board_size;
}
bool isMoveValid(int board[], int move)
{
if(board[move] < 0)
return true;
return false;
}
bool isWin(int board[], int move)
{
if((board[0] == board[1] && board[0] == board[2]) ||
(board[3] == board[4] && board[3] == board[5]) ||
(board[6] == board[7] && board[6] == board[8]) ||
(board[0] == board[3] && board[0] == board[6]) ||
(board[1] == board[4] && board[1] == board[7]) ||
(board[2] == board[5] && board[2] == board[8]) ||
(board[0] == board[4] && board[0] == board[8]) ||
(board[2] == board[4] && board[2] == board[6]))
return true;
return false;
}
这里是我的define.h头文件有所有的原型…
#ifndef formula
#define formula
const int board_size = 9;
int random(int x);
void clearBoard(int board[]);
void drawBoard(int board[]);
int getPlayerMove(int player);
int makeRandMove(int player);
bool isMoveValid(int boardp[], int move);
bool isWin(int board[], int move);
#endif
理解clearBoard和drawBoard这两个你难以理解的棋盘函数的关键在于,你需要理解你所存储的游戏棋盘的数据结构。事实上,这是一个非常简单的例子。您的board被定义为包含9个项目的数组:
int board[board_size];
...
const int board_size = 9;
考虑这个问题的最佳方式是,如果你有一个3 x 3的井字游戏棋盘,并将每一行并排放置。所以前三个元素是第一行,后三个元素是第二行,后三个元素是最后一行。
drawBoard函数是这两个函数中更复杂的一个,但是如果你理解了数组是什么以及它代表了什么,它会让这个函数更容易理解。外部的for循环循环遍历游戏板的每一行,而内部的for循环循环遍历该行中的每个元素。
相关文章:
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 使用虚幻引擎4编程的平台游戏中的偏转问题
- C++ Qt - 检查 Steam 游戏是否以编程方式运行
- argc C++中的argv参数(游戏编程)
- 在什么编程语言游戏引擎上编写"Frostbit 3"?
- 很好的具体地方(书籍/教程)开始用C / C++编程游戏
- 用NDK编程安卓游戏还需要Java吗
- C++视频游戏编程IDE
- C++编程生物游戏
- 如何为我的蛋捕手游戏创建落蛋?面向对象编程c++的新手
- C++(游戏编程)中同一对象的实例
- C++游戏编程帮助.超级简单
- 以编程方式进行游戏板菜单导航
- SDL C++游戏编程帮助(简单)
- C++编程双骰子游戏模拟
- 使用TDD进行食人魔游戏编程
- 编程一个简单的游戏,
- C++ SFML游戏编程链接错误
- C++游戏、线程和并发编程
- 将脚本语言嵌入游戏引擎中的编程语言的目的是什么?