【发布时间】:2020-02-01 18:38:33
【问题描述】:
我正在制作一个带有半图形界面的多人井字游戏。我已经编写了代码,并且大部分都可以工作。其中唯一不工作的部分是绘图功能。
我确实知道我使用的是 TurboC++,它是一个非常过时的编译器,但印度教育系统只遵循 TurboC++,所以我必须在其中制作我的项目。(教学大纲已更改为使用 Python 而不是最近C++,但我恰好是最后一批不会教Python的学生)
问题出在 result() 函数的最后一部分。我找不到它有什么问题。我没有使用 graphics.h,因为它不在我的教学大纲中。
单独的结果函数:
struct mat //To store the positions and what is present in the 9 boxes
{
int x,y;char ch;
};
struct xo //To keep track of the match
{
int actp,actx,acty;
mat pos[3][3];
char flag;
void setup() //To create the boxes/bars
{
actp=1,actx=1,acty=1;
flag=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
pos[i][j].ch=0;
}
}
void result() //To find the result
{
char flage;
for(int i=0;i<3;i++) //Column win
{
if(pos[i][0].ch==pos[i][1].ch&&pos[i][1].ch==pos[i][2].ch)
flage=pos[i][0].ch;
}
for(i=0;i<3;i++) //Row win
{
if(pos[0][i].ch==pos[1][i].ch&&pos[1][i].ch==pos[2][i].ch)
flage=pos[0][i].ch;
}
if(pos[0][0].ch==pos[1][1].ch&&pos[1][1].ch==pos[2][2].ch) //Diagonal win
flage=pos[0][0].ch;
if(pos[0][2].ch==pos[1][1].ch&&pos[1][1].ch==pos[2][0].ch) //Other diagonal win
flage=pos[0][2].ch;
if(flage=='X')flag='1';
else if(flage=='O')flag='2';
else flag='0';
int chk=1;
for(i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{if(pos[i][j].ch=='0'){chk=0;gotoxy(3,15);cout<<chk;} }//Added cout statement for debugging
}
if(flag=='0'&&chk==0)flag='D';//I understand that the condition is supposed to be chk==1,but it works only if I have this condition
}
}a;
这里是整个代码,如果需要的话: https://drive.google.com/open?id=19WMexp3Hw_p9hO3qiYm0HRj-GGAJeaTr
截图: https://i.stack.imgur.com/wGh7a.jpg
如果我使用正确的条件,程序会说比赛是在 1 步之后进行的。
在这种错误条件下,程序在一定程度上可以工作,并且能够找到获胜者,但即使发生了比赛,也不会宣布平局。
感谢您的帮助!
【问题讨论】:
-
欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs 和 Debugging Guide
-
为什么需要
位置的 3x3 数组?你似乎把一个简单的游戏做得很复杂。
-
一个更简单的游戏版本为盒子编号,并使用一维数组。
-
嗯,先生,我想我很清楚地提到了哪条线路导致了问题。我需要一个具有行和列位置的 3x3 数组,因为该程序是一个高度直观的半图形用户界面。
-
一个 3x3 的整数数组就足够了(0 表示空,1 表示“X”,2 表示“O”——为了更好的风格,你可以使用枚举来明确这些含义代码)