如何用Dev-C++编写一个贪吃蛇
时间: 2023-07-18 14:04:05 浏览: 205
以下是使用Dev-C++编写贪吃蛇的基本步骤:
1. 创建一个新的C++项目,并命名为“贪吃蛇”。
2. 在项目中创建一个新的C++源文件,并将其命名为“main.cpp”。
3. 在“main.cpp”文件中,包含必要的头文件和命名空间:
```
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
```
4. 定义贪吃蛇和食物的结构体:
```
struct Snake{
int x, y;
};
struct Food{
int x, y;
};
```
5. 定义全局变量和常量:
```
const int mapWidth = 20;
const int mapHeight = 20;
const int snakeMaxLen = 100;
const int interval = 100;
int direction = 0;
int score = 0;
int snakeLen = 3;
Snake snake[snakeMaxLen];
Food food;
```
6. 初始化游戏窗口和贪吃蛇的初始位置:
```
void init(){
system("mode con cols=40 lines=25");//设置窗口大小
srand((unsigned)time(NULL));//初始化随机数种子
snake[0].x = 10;
snake[0].y = 10;
snake[1].x = 9;
snake[1].y = 10;
snake[2].x = 8;
snake[2].y = 10;
food.x = rand() % mapWidth;
food.y = rand() % mapHeight;
}
```
7. 定义绘制函数,用于绘制游戏界面:
```
void draw(){
system("cls");//清屏
for(int i = 0; i < mapHeight; i++){
for(int j = 0; j < mapWidth; j++){
if(i == 0 || i == mapHeight - 1 || j == 0 || j == mapWidth - 1){
cout << "#";//绘制边框
}else if(i == snake[0].y && j == snake[0].x){
cout << "H";//绘制蛇头
}else if(i == food.y && j == food.x){
cout << "*";//绘制食物
}else{
bool isBody = false;
for(int k = 1; k < snakeLen; k++){
if(i == snake[k].y && j == snake[k].x){
cout << "o";//绘制蛇身
isBody = true;
break;
}
}
if(!isBody){
cout << " ";//绘制空格
}
}
}
cout << endl;
}
cout << "Score: " << score << endl;//显示得分
}
```
8. 定义移动函数,用于控制贪吃蛇的移动:
```
void move(){
for(int i = snakeLen - 1; i > 0; i--){
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
switch(direction){
case 0://向上移动
snake[0].y--;
break;
case 1://向下移动
snake[0].y++;
break;
case 2://向左移动
snake[0].x--;
break;
case 3://向右移动
snake[0].x++;
break;
}
}
```
9. 定义碰撞检测函数:
```
bool check(){
if(snake[0].x == 0 || snake[0].x == mapWidth - 1 || snake[0].y == 0 || snake[0].y == mapHeight - 1){
return true;//撞到边界
}
for(int i = 1; i < snakeLen; i++){
if(snake[0].x == snake[i].x && snake[0].y == snake[i].y){
return true;//撞到自己
}
}
if(snake[0].x == food.x && snake[0].y == food.y){
score += 10;//吃到食物
snakeLen++;
food.x = rand() % mapWidth;
food.y = rand() % mapHeight;
}
return false;
}
```
10. 在主函数中,循环执行绘制、移动和碰撞检测等操作:
```
int main(){
init();
while(true){
if(_kbhit()){
char ch = _getch();
switch(ch){
case 'w'://向上移动
if(direction != 1){
direction = 0;
}
break;
case 's'://向下移动
if(direction != 0){
direction = 1;
}
break;
case 'a'://向左移动
if(direction != 3){
direction = 2;
}
break;
case 'd'://向右移动
if(direction != 2){
direction = 3;
}
break;
}
}
move();
if(check()){
cout << "Game Over!" << endl;
break;
}
draw();
Sleep(interval);//延迟
}
return 0;
}
```
11. 编译并运行程序,即可开始游戏。
阅读全文