贪吃蛇

贪吃蛇C++

贪吃蛇C++源码

贪吃蛇C++版本的源码。

#include “pch.h”
#include
#include <Windows.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct {
int x;
int y;
}food;
food food1;

typedef struct {
int x[100];
int y[100];
int length;
int speed;
}snake;
snake snake1;

int key = '’;
int ChangeFlag = 0;
char name[20];
int score=0; //定义分数
void drapmap(); //画地图
void createfood(); //画食物
void createsnake(); //画蛇snake
void gotoxy(int x, int y);//光标
void ChangeBody(int a, int b);//身体的改变
int ClickControl(); //
void Movingbody();
int Judge();//判断
void Eating();
void Finish();
void welcome()
{
gotoxy(15, 10);
cout << "/
/";
gotoxy(15, 20);
cout << "/
*/";
gotoxy(20, 13);
cout << “WELCOME TO THE GAME OF RETRO SNAKE”;
gotoxy(14, 16);
cout << “请在英文输入法中操作,反向移动等同于吃到自己,wasd控制p暂停”;
gotoxy(20, 18);
cout << “PLEASE ENTER YOUR NAME:”;
scanf_s("%s", &name, 10); //提高代码的安全性
system(“cls”); //实现清屏操作
}

void gotoxy(int x, int y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(handle, coord);
}

int ClickControl()
{
while (1)
{
if (Judge() == 0) return 0;
if (_kbhit())
{
key = _getch();
}
Movingbody();
Eating();
}
return 1;
}

void drapmap()
{
for (int i = 0; i <58; i+=2)//打造上下边框,上下边框一个“■”占两个位置
{
gotoxy(i,0 );
cout << “■”;
gotoxy(i, 26);
cout << “■”;
}
for (int i = 1; i <26; i++)//打造左右边框,一个“■”只占一个位置
{
gotoxy(0 ,i);
cout << “■”;
gotoxy(56, i);
cout << “■”;
}
//在左边加入计分和显示功能
gotoxy(63, 10);
cout << "hello " << name << “,welcome To play”;
gotoxy(63, 15);
cout << “your score is:” << score;
gotoxy(63, 20);
cout << “The Game Is Created By 雷哥”;
}

void Movingbody()
{
int count = 0;
int a = snake1.x[0], b = snake1.y[0];
for (int i = 0; i < snake1.length; i++)
{
count++;
gotoxy(snake1.x[i], snake1.y[i]);
cout << " ";
}
switch (key)
{
case ‘w’:
case ‘W’:
snake1.y[0]–;
ChangeBody(a, b);
break;
case ‘s’:
case ‘S’:
snake1.y[0]++;
ChangeBody(a, b);
break;
case ‘a’:
case ‘A’:
snake1.x[0] -= 2;
ChangeBody(a, b);
break;
case ‘d’:
case ‘D’:
snake1.x[0] += 2;
ChangeBody(a, b);
break;
case ‘p’:
case ‘P’:
_getch();
break;
}
for (int i = 0; i < snake1.length; i++)
{
gotoxy(snake1.x[i], snake1.y[i]);
cout << “■”;
}
gotoxy(0, 27);
if (count <= 10) snake1.speed = 150;
else if (count > 10 && count <= 20) snake1.speed = 100;
else if (count > 20 && count <= 40) snake1.speed = 50;
else snake1.speed = 10;
Sleep(snake1.speed);
}

void Eating()
{
if (snake1.x[0] == food1.x&&snake1.y[0] == food1.y)
{
createfood();
if (snake1.x[snake1.length - 1] - 2 == snake1.x[snake1.length - 2])
snake1.x[snake1.length] = snake1.x[snake1.length - 1] + 2;
else snake1.x[snake1.length] = snake1.x[snake1.length - 1] - 2;
snake1.y[snake1.length] = snake1.y[snake1.length - 1];
gotoxy(snake1.x[snake1.length], snake1.y[snake1.length]);
cout << “■”;
snake1.length++;
score += 10;
gotoxy(77, 15);
cout << score;
}
}
void createfood()
{
srand((int)time(NULL));
lable:
food1.y = rand() % (25-1+1) + 1;
food1.x = rand() % (54-2+1) + 2;

if (food1.x % 2 != 0)
{
	food1.x = food1.x + 1;
}

for (int i = 0; i < snake1.length; i++)
{
	if (food1.x == snake1.x[i] && food1.y == snake1.y[i])
	{
		goto lable;
	}
}
gotoxy(food1.x, food1.y);
cout << "⊙";;

}

void ChangeBody(int a, int b)
{
int mid1, mid2, mid3, mid4;
mid1 = snake1.x[1];
mid2 = snake1.y[1];
for (int i = 2; i <=snake1.length - 1; i++)
{
mid3 = snake1.x[i];
mid4 = snake1.y[i];
snake1.x[i] = mid1;
snake1.y[i] = mid2;
mid1 = mid3;
mid2 = mid4;
}
snake1.x[1] = a;
snake1.y[1] = b;
}

void createsnake()
{
snake1.length = 3;
snake1.speed = 100;
snake1.x[0] = 16;
snake1.y[0] = 16;
gotoxy(snake1.x[0], snake1.y[0]);
cout << “■”;
for (int i = 1; i < snake1.length; i++)
{
snake1.x[i] = snake1.x[i - 1] + 2;
snake1.y[i] = snake1.y[i - 1];
gotoxy(snake1.x[i], snake1.y[i]);
cout << “■”;
}
}

void Finish()
{
system(“cls”);
gotoxy(15, 10);
cout << “//";
gotoxy(15, 20);
cout << "/
/”;
gotoxy(18, 14);
cout << “GAME OVER o( ̄▽ ̄)o”;
gotoxy(20, 16);
cout << “Your Score is: “<<score<<” hiahiahia”;
gotoxy(18, 18);
cout << “还不错哦, 继续努力O(∩_∩)O”;
gotoxy(0, 27);
system(“pause”);
}
int Judge()
{
if (snake1.x[0] == 0 || snake1.x[0] == 56 || snake1.y[0] == 0 || snake1.y[0] == 26)
{
Finish();
return 0;
}
for (int i = 1; i < snake1.length; i++)
{
if (snake1.x[0] == snake1.x[i] && snake1.y[0] == snake1.y[i])
{
Finish();
return 0;
}
}
return 1;
}
int main()
{
system(“color 0B”);
welcome();
drapmap();
createfood();
createsnake();
if (ClickControl() == 0) return 0;
return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值