void drawMap() { //打印上下边框 for (i = 0; i <= MAPWIDTH; i += 2)//i+=2是因为横向占用的是两个位置 { //将光标移动依次到(i,0)处打印上边框 gotoxy(i, 0); printf("■"); //将光标移动依次到(i,MAPHEIGHT)处打印下边框 gotoxy(i, MAPHEIGHT); printf("■"); } //打印左右边框 for (i = 1; i < MAPHEIGHT; i++) { //将光标移动依次到(0,i)处打印左边框 gotoxy(0, i); printf("■"); //将光标移动依次到(MAPWIDTH, i)处打印左边框 gotoxy(MAPWIDTH, i); printf("■"); }
时间: 2024-03-22 17:40:35 浏览: 86
这段代码是贪吃蛇游戏中绘制地图的函数。具体而言,代码中的 drawMap 函数首先使用两个 for 循环分别打印了地图的上下边框和左右边框。上下边框的打印是通过将光标移动到每个位置,然后打印一个方块来实现的;而左右边框的打印则是通过将光标移动到每个位置,然后打印一个竖线来实现的。需要注意的是,由于一个方块占用了两个字符位置,因此横向循环时需要以步长 2 前进。
相关问题
import flash.display.Shape; import flash.events.KeyboardEvent; var npcX=1; var npcY=1; var mgArray:Array=new Array(); mgArray[0]=[ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 ]; mgArray[1]=[ 28, 8, 0, 28, 0, 0, 28, 0, 28, 28 ]; mgArray[2]=[ 28, 0, 0, 28, 28, 0, 28, 0, 0, 28 ]; mgArray[3]=[ 28, 0, 0, 0, 28, 0, 0, 0, 0, 28 ]; mgArray[4]=[ 28, 0, 28, 28, 28, 0, 0, 28, 28, 28 ]; mgArray[5]=[ 28, 0, 0, 0, 28, 0, 0, 0, 0, 28 ]; mgArray[6]=[ 28, 28, 0, 0, 28, 0, 28, 28, 28, 28 ]; mgArray[7]=[ 28, 28, 0, 0, 0, 0, 0, 0, 0, 28 ]; mgArray[8]=[ 28, 0, 0, 0, 0, 0, 28, 0, 0, 0 ]; mgArray[9]=[ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 ]; var s:Shape=new Shape(); this.addChild(s); function drawMap():void{ s.graphics.clear(); for(var i:Number=0;i<10;i++) for(var j:Number=0;j<10;j++){ if(mgArray[i][j]==28){ s.graphics.beginFill(0x00ff00,1); s.graphics.drawRect(0+j*40,0+i*40,40,40); } if(mgArray[i][j]==8){ s.graphics.beginFill(0xff0000,1); s.graphics.drawRect(0+j*40,0+i*40,40,40); } } } drawMap();
这段代码是用 ActionScript 3.0 语言编写的,主要是绘制一个 10x10 的地图,其中包含了障碍物和 NPC(non-player character,非玩家角色)。mgArray 数组用来存储地图的信息,其中数字 28 表示地图的空白区域,数字 8 表示 NPC 的位置。s 变量是一个 Shape 对象,用来绘制地图。函数 drawMap() 用来绘制地图,其中使用了 for 循环来遍历 mgArray 数组,并根据数组中的值来决定绘制哪种颜色的矩形。具体来说,如果数组中的值为 28,则绘制绿色的矩形;如果值为 8,则绘制红色的矩形。最后调用 drawMap() 函数来绘制地图。
这个贪吃蛇代码 前面的函数实现忽略 帮我改改主函数int main() { drawMap(); while (1) { keyDown(); if (!snakeStatus()) break; createFood(); Sleep(snake.speed); } gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2); printf("Game Over!\n"); gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1); printf("长度为:%d", snake.len); Sleep(500); return 0; } //按下按键才开始怎么改, //用户随意按键后蛇即刻开始自行行走,可设置行走速率为0.5秒。 /*start=clock(); while((timeover=(clock()-start<=500))&&!kbhit());这段代码怎么加进去 */
您可以将原来的while循环改为以下代码:
```c++
drawMap();
bool gameover = false;
while (!gameover) {
if (_kbhit()) keyDown(); // 按下按键才开始
gameover = !snakeStatus();
createFood();
Sleep(snake.speed);
}
// 加入计时器
clock_t start = clock();
while (clock() - start <= 500 && !kbhit());
gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);
printf("Game Over!\n");
gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1);
printf("长度为:%d", snake.len);
Sleep(2000);
return 0;
```
这样更改后,先绘制地图,然后只有在按下按键后才开始蛇的行走。在每次循环中,检测蛇是否存活,如果不存活则结束游戏。每次循环结束后创建食物,并且等待一段时间再进行下一次循环。在游戏结束后,加入了计时器,等待500毫秒或者用户按下按键后再退出游戏。
阅读全文