算了好几遍还是没有求出数组 C 的元素,可以确定是在循环这一块有问题但是不知道具体错在哪里,详细解答
第一个循环是给数组c[5]的元素进行加一操作,数组s[12]中的元素是c[5]中进行加一操作的元素下标。第一个循环结束才进行第二个循环,数组s[12]中1出现4次,那就对c[1]进行4次加一操作,所以结果是4,2出现3次就进行3次加一操作,所以c[2]等于3。
效果如下:
击杀Single敌机版(C代码实现)
详细代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define high 20 //游戏画面尺寸
#define width 36 //如果不把这两个变量设为符号常量而设为全局变量,编译器就会报错
//至于为什么大家可以在评论区下讨论,我想看看大家对这个的想法
//问题:符号常量与全局变量有什么区别?
//最后我会公布答案
int x, y; //飞机坐标
int enemy_x, enemy_y; //敌机坐标
int score; //得分
int life; //飞机生命值
int canvas[high][width + 17] = {0}; //二维数组存储游戏画布中对应的元素
//1为飞机,2为子弹,3为敌机
//width + 17 是为了保证飞机右翼不会超出右线
//而之后的enemy_y = rand() * 100 % width + 9;是
//为了保证敌机在左边线以右9个单位的距离
//这是间接的控制飞机左翼不超过左边界的方法
int digit(int s)
{
int ne, t, bi;
ne = s;
int num = 0;
while(ne)
{
t = ne % 10;
ne /= 10;
num++;
}
return num;
}
void startup()
{
x = high / 2;
y = width / 2;
canvas[x][y] = 1;
enemy_x = 0;
enemy_y = y;
life = 3;
canvas[enemy_x][enemy_y] = 3;
score = 0;
}
void gotoxy(int x, int y) //将光标移动到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void show()
{
gotoxy(0, 0);
HideCursor();
int i, j;
for(i = 0; i < high; i++)
{
for(j = 0; j < width + 17; j++)
{
if((i == x) && (j == y))
{
printf("*");
}
else if((i == x + 1) && (j == y - 2))
{
printf(" * *");
j += 3;
}
else if((i == x + 2) && (j == y - 2))
{
printf("* * *");
j += 4;
}
else if((i == x + 3) && (j == y - 6))
{
printf("* * * * * * *");
j += 12;
}
else if((i == x + 4) && (j == y - 8))
{
printf("* * * * * * * * *");
j += 16;
}
else if((i == x + 5) && (j == y - 1))
{
printf("* * ");
j += 3;
}
else if(canvas[i][j] == 3)
printf("@");
else if(canvas[i][j] == 2)
printf("|");
else
printf(" ");
}
printf("#\n");
}
printf("生命值:%d", life);
int space = digit(life);
if(space == 1)
{
for(i = 0; i < width + 8; i++)
printf(" ");
}
else
{
for(i = 0; i < width + 8 - (space - 1); i++)
printf(" ");
}
printf("#\n");
printf("得分:%d", score);
int space2 = digit(score);
if(space2 == 1)
{
for(i = 0; i < width + 9; i++)
printf(" ");
}
else
{
for(i = 0; i < width + 9 - (space2 - 1); i++)
printf(" ");
}
printf("#\n");
for(i = 0; i < width + 17; i++)
printf("#");
}
void updateWithoutInput() //与用户输入无关的更新
{
int i, j;
for(i = 0; i < high; i++)
{
for(j = 0; j < width + 17; j++)
{
if(canvas[i][j] == 2)
{
if((i - 1 == enemy_x) && (j == enemy_y))
{
score++; //得分
canvas[enemy_x][enemy_y] = 0; //敌机已被消灭
enemy_x = 0;
enemy_y = rand() * 100 % width + 9;
canvas[enemy_x][enemy_y] = 3; //产生敌机
canvas[i][j] = 0; //子弹消耗掉
}
canvas[i][j] = 0;
if(i > 0)
canvas[i - 1][j] = 2; //子弹向上移动
}
}
}
if(enemy_x > high) //防线被突破
{
canvas[enemy_x][enemy_y] = 0;
enemy_x = 0;
enemy_y = rand() * 100 % width + 9;
canvas[enemy_x][enemy_y] = 3;
score--; //减分
life--;
}
if(enemy_x >= x)
{
life--;
score--;
if(life == 0)
{
printf("\n任务失败!!!\n");
system("pause");
exit(0);
}
canvas[enemy_x][enemy_y] = 0;
enemy_x = 0;
enemy_y = rand() * 100 % width + 9;
canvas[enemy_x][enemy_y] = 3;
}
static int speed = 0; //控制敌机下落速度
if(speed < 10)
speed++;
if(speed == 10)
{
canvas[enemy_x][enemy_y] = 0;
enemy_x++;
speed = 0;
canvas[enemy_x][enemy_y] = 3;
}
}
void updateWithInput() //与用户输入有关的更新
{
char input;
if(kbhit())
{
input = getch();
if(input == 'a')
{
canvas[x][y] = 0;
y--;
canvas[x][y] = 1;
}
if(input == 'd')
{
canvas[x][y] = 0;
y++;
canvas[x][y] = 1;
}
if(input == 'w')
{
canvas[x][y] = 0;
x--;
canvas[x][y] = 1;
}
if(input == 's')
{
canvas[x][y] = 0;
x++;
canvas[x][y] = 1;
}
if(input == ' ')
{
// bullet_x = x - 1;
// bullet_y = y;
canvas[x - 1][y] = 2;
}
}
}
int main()
{
startup();
while(1)
{
show();
updateWithoutInput();
updateWithInput();
}
return 0;
}
对于问题:请问您在使用for循环计算一维数组C的元素时遇到了问题,但无法确定具体错误所在?您能否提供一下您当前写的for循环的代码以及数组C的定义和初始化过程,以方便更好地对问题进行解答和分析。谢谢!
由于题目中未给出数组C的定义和初始化过程,因此无法提供具体的解决方案,请提供完整的代码和定义后再咨询,谢谢!