包括食物的位置等。
4. 控制蛇的移动:
根据用户的输入(上下左右键)来改变蛇头的位置,然后更新蛇身的坐标。
在每次更新游戏状态后,都需要重新绘制游戏界面,包括蛇和食物。
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define WIDTH 50
#define HEIGHT 25
int snake_x[WIDTH * HEIGHT], snake_y[WIDTH * HEIGHT];
int food_x, food_y;
int snake_length;
int direction; // 0:上, 1:右, 2:下, 3:左
void gotoxy(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void init() {
srand((unsigned)time(NULL));
snake_length = 3;
direction = rand() % 4; // 随机生成初始方向
for (int i = 0; i < snake_length; i++) {
snake_x[i] = snake_length – i – 1;
snake_y[i] = rand() % (HEIGHT – 2) + 1; // 蛇身不能出界
}
food_x = rand() % (WIDTH – 2) + 1;
food_y = rand() % (HEIGHT – 2) + 1;
}
void draw() {
system(“cls“); // 清屏
for (int i = 0; i < WIDTH; i++) {
printf(“#”);
}
printf(“
“);
for (int i = 1; i < HEIGHT – 1; i++) {
printf(“#”);
for (int j = 1; j < WIDTH – 1; j++) {
int is_snake = 0;
for (int k = 0; k < snake_length; k++) {
if (snake_x[k] == j && snake_y[k] == i) {
printf(“*”); // 蛇身用*表示
is_snake = 1;
break;
}
}
if (!is_snake) {
if (food_x == j && food_y == i) {
printf(“@”); // 食物用@表示
} else {
printf(” “); // 空白表示空地
}
}
}
printf(“#
“);
}
for (int i = 0; i < WIDTH; i++) {
printf(“#”);
}
printf(“
“);
}
void update() {
int next_x = snake_x[0], next_y = snake_y[0];
switch (direction) {
case 0: next_y–; break; // 上移一格
case 1: next_x++; break; // 右移一格
case 2: next_y++; break; // 下移一格
case 3: next_x–; break; // 左移一格
}
if (next_x == food_x && next_y == food_y) { // 如果吃到食物,长度加一,重新生成食物位置
snake_length++;
food_x = rand() % (WIDTH – 2) + 1;
food_y = rand() % (HEIGHT – 2) + 1;
} else { // 如果没吃到食物,移除蛇尾,即当前位置不变,其他位置向前移动一位,最后一位设为空位(即空地)
for (int i = snake_length – 1; i > 0; i–) {
snake_x[i] = snake_x[i – 1];
snake_y[i] = snake_y[i – 1];
}
snake_x[0] = next_x; // 新头部位置设为next_x, next_y(即蛇头的新位置)
snake_y[0] = next_y; // 因为前面已经把其他位置都向前移动了一位,所以这里不需要再移动了,直接设为next_x, next_y即可(即蛇头的新的坐标)
}
}
“`
原文地址:https://blog.csdn.net/2301_79368222/article/details/134762987
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_36586.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!