用C代码写贪吃蛇游戏--用按键控制蛇移动

通过按键控制蛇的移动,首先需要读取按键,通过按键来控制。

通过百度后得知用kbhit();

用一小段代码进行测试:

一直输出Hello World,直到用户按Esc结束

#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(void)
{
    char ch;
    while(ch!=27)
    {
        printf("HelloWorld\n");
        if(kbhit())
        {
            ch=getch();
        }
    }
    printf("End!\n");
    system("pause");
    return 0;
}

kbhit()在执行时,检测是否有按键按下,有按下返回非0值,没有按下则返回0,是非阻塞函数;
不同于getch()的在执行时,检测按下什么键,如果不按键该函数不返回,也就不进行下一步操作,是阻塞函数。

显而易见,我们需要在蛇移动的时候进行控制。我们只需要通过控制蛇头的方向,蛇身依次而动就可以了。

实现逻辑:

1、加入按键控制

2、判断是否有按键

3、按照按键来进行移动

4、没有按键,按照固定方向移动

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是使用EasyX图形库和C语言贪吃蛇游戏代码: ```c #include <graphics.h> #include <conio.h> #include <time.h> #include <stdlib.h> #define HEIGHT 480 // 窗口高度 #define WIDTH 640 // 窗口宽度 #define SIZE 20 // 身大小 #define MAXLEN 100 // 的最大长度 int snakeX[MAXLEN]; // 身X坐标 int snakeY[MAXLEN]; // 身Y坐标 int len = 5; // 的初始长度 int dir = 0; // 头方向 int foodX, foodY; // 食物坐标 // 初始化的位置和食物的位置 void init() { for (int i = 0; i < len; i++) { snakeX[i] = WIDTH / 2 - i * SIZE; snakeY[i] = HEIGHT / 2; } foodX = rand() % (WIDTH / SIZE - 2) * SIZE + SIZE; foodY = rand() % (HEIGHT / SIZE - 2) * SIZE + SIZE; } // 判断是否撞墙或者撞自己 bool isGameOver() { if (snakeX[0] >= WIDTH || snakeX[0] < 0 || snakeY[0] >= HEIGHT || snakeY[0] < 0) { return true; } for (int i = 1; i < len; i++) { if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) { return true; } } return false; } // 画 void drawSnake() { setfillcolor(YELLOW); for (int i = 0; i < len; i++) { fillrectangle(snakeX[i], snakeY[i], snakeX[i] + SIZE, snakeY[i] + SIZE); } } // 更新 void updateSnake() { for (int i = len - 1; i > 0; i--) { snakeX[i] = snakeX[i - 1]; snakeY[i] = snakeY[i - 1]; } switch (dir) { case 0: snakeX[0] += SIZE; break; // 向右 case 1: snakeY[0] -= SIZE; break; // 向上 case 2: snakeX[0] -= SIZE; break; // 向左 case 3: snakeY[0] += SIZE; break; // 向下 } } // 随机生成食物 void newFood() { foodX = rand() % (WIDTH / SIZE - 2) * SIZE + SIZE; foodY = rand() % (HEIGHT / SIZE - 2) * SIZE + SIZE; } // 画食物 void drawFood() { setfillcolor(GREEN); fillrectangle(foodX, foodY, foodX + SIZE, foodY + SIZE); } int main() { srand(time(NULL)); // 随机数种子 initgraph(WIDTH, HEIGHT); init(); while (true) { drawSnake(); drawFood(); updateSnake(); if (snakeX[0] == foodX && snakeY[0] == foodY) { // 吃到食物 len++; newFood(); } if (isGameOver()) { // 游戏结束 break; } Sleep(100); // 控制速度 cleardevice(); // 清屏 if (_kbhit()) { // 按键检测 switch (_getch()) { case 'w': dir = 1; break; // 向上 case 'a': dir = 2; break; // 向左 case 's': dir = 3; break; // 向下 case 'd': dir = 0; break; // 向右 } } } closegraph(); return 0; } ``` 运行代码后,即可看到贪吃蛇游戏窗口,并可以使用键盘的 WASD 键控制移动
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值