但是,我试图从添加它们的同一函数中删除添加到数组中的字符。它似乎不起作用。因为它根本不做任何事情。
(这是我作为业余爱好制作的贪吃蛇游戏)
我预计数组会正常更改,并且蛇的先前部分会被删除。但它实际上并没有这样做。 并将之前的部分留在那里,不会给我错误或删除任何内容。 我已经尝试在 movesnake 函数移动蛇后每次调用 resetboard 函数,但是这使得蛇只是在一个地方闲逛而没有移动。我还尝试更改蛇的起始位置,以防 0-1 在我的数组中给我一个错误,但这也没有做任何事情。 (这只是一个非常粗略的练习版本,让我更多地了解c++,所以在完成的游戏中所有这些代码都会被更改)
#include <iostream>
#include <string>
#include <windows.h>
#include <stdlib.h>
#include <thread>
using namespace std;
char board[10][10];
void resetboard(){
for (int i=0;i <= 9;i++){
for(int y=0;y <= 9;y++){
board[i][y] = 'x';
}
}
}
//COMPLETELY CHANGE THE MOVESNAKE FUNCTION
void movesnake(){
while(1){
unsigned int snakecoord1 = 0;
unsigned int snakecoord2 = 0;
while(snakecoord1 <= 9){
board[snakecoord1][snakecoord2] = 'E';
/*code thats "broken"
board[snakecoord1-1][snakecoord2] = 'x';
*/
snakecoord1++;
Sleep(1*1000);
}
}
}
void updateboard(){
while(1){
int rows = 0;
int columns = 0;
do{
do{
cout << board[rows][columns];
cout << " ";
rows++;
}while(rows <= 9);
rows = 0;
cout << "\n";
columns++;
}while(columns <= 9);
Sleep(1*1000);
thread moveplayer(movesnake);
moveplayer.detach();
system("CLS");
}
}
int main(){
resetboard();
thread printboard(updateboard);
printboard.detach();
Sleep(10*1000);
system("CLS");
}
我的程序中似乎有太多线程都想同时访问板。我以这样的方式更改了它,以便唯一分离的线程是更新板线程。