贪吃蛇(自编,抄袭没用)
2023-08-14 09:14:52
发布于:四川
#include"role.h"
#define LevUp 5
using namespace std;
void start_game();
void init_game();
void creatSnake();
void showSnake();
void showFood();
void getKey();
void changeSnake();
void eatFood();
void upScore();
int die();
struct MYsnake{
int x;
int y;
};
struct Food{
int x;
int y;
};
struct MYsnake body[100];
struct MYsnake head;
struct Food food;
int length = 0;
int mapX = 50;
int mapY = 50;
int keyF;
int score;
int lev = 9;
int Flag = 1;
int main()
{
srand(time(0));
start_game();
init_game();
showFood();
creatSnake();
showSnake();
while(true){
getKey();
changeSnake();
showSnake();
eatFood();
upScore();
void upScore();
if(score % LevUp == 0 && score != 0){
if(Flag == 1){
lev++;
score = 0;
Flag = 0;}
}
if(lev >= 9){
lev = 9;
}
color(6);
gotoxy(70,15);
cout<<"蛇长" <<length;
gotoxy(70,17);
cout<<"等级:"<<lev;
Sleep(200 - lev*20);
if(die() == 0){
Sleep(400);
system("cls");
gotoxy(mapX/2,mapY/2);
cout<<"游戏结束";
gotoxy(mapX/2,mapY/2 + 2);
cout<<"得分:"<<length;
Sleep(400);
break;
}
}
gotoxy(55,55);
return 0;
}
void start_game()
{
color(15);
gotoxy(12,13);
cout <<"★贪 吃 蛇 ★";
gotoxy(12,15);
cout<<"输入y开始游戏:";
char c;
cin>>c;
system("cls");
gotoxy(70, 7);
cout << "游戏控制方式:";
gotoxy(70, 9);
cout << "W键:向上 S键:向下";
gotoxy(70, 11);
cout << "A键:向左 D键:向右";
gotoxy(70, 13);
cout << "将游戏窗口最大化之后开始游戏...";
color(6);
for(int i = 0; i <= mapX; i++){
gotoxy(i,0);
cout <<"□";
gotoxy(i,mapX);
cout <<"□";
}
for(int i = 0; i <= mapY;i++){
gotoxy(0,i);
cout <<"□";
gotoxy(mapY,i);
cout <<"□";
}
}
void init_game(){
color(15);
for(int j = 1; j <=mapX-1; j++){
for(int i = 1;i <= mapY-1; i++){
gotoxy(j,i);
cout <<"■";
}
}
}
void creatSnake()
{
head.x = rand()%(mapX-1)+1;
head.y = rand()%(mapY-1)+1;
}
void showSnake(){
int i;
color(9);
gotoxy(head.x ,head.y );
cout<<"●";
for(i = 0; i < length;i++){
color(4);
gotoxy(body[i].x , body[i].y );
cout<<"●";
}
}
void showFood(){
int i = 0;
while(true){
food.x = (rand() % (mapX - 1))+1;
food.y = (rand() % (mapY - 1))+1;
if(food.x == head.x || food.y == head.y)
continue;
for(i = 0; i < length;i++){
if(body[i].x == food.x && body[i].y == food.y){
break;
}
}
if(i == length){
break;
}
}
// gotoxy(0, 80);
// cout << food.x << " " << food.y;
gotoxy(food.x ,food.y);
color(6);
cout<<"●";
}
void getKey(){
char c;
if(kbhit()){
c = getch();
if(c == 'w' || c == 'W'){
keyF = 1;
}
if(c == 'a' || c == 'A'){
keyF = 2;
}
if(c == 's' || c == 'S'){
keyF = 3;
}
if(c == 'd' || c == 'D'){
keyF = 4;
}
if(c == ' ' ){
keyF = 5;
}
}
}
void changeSnake()
{
struct MYsnake tmp = head;
if(keyF == 1)
{
head.y--;
}
if(keyF == 2)
{
head.x--;
}
if(keyF == 3)
{
head.y++;
}
if(keyF == 4)
{
head.x++;
}
if(keyF == 5)
{
}else{
if(length == 0){
color(15);
gotoxy(tmp.x,tmp.y);
cout<<"■";
}else{
color(15);
gotoxy(body[length-1].x, body[length-1].y);
cout<<"■";
}for(int i = length-1; i>0; i--){
body[i] = body[i-1];
}
body[0] = tmp;
}
}
void eatFood(){
if(food.x == head.x && food.y == head.y){
body[length].x = food.x;
body[length].y = food.y;
length++;
Flag = 1;
showFood();
}
}
void upScore(){
score = length;
}
int die(){
if(head.x == 0 || head.y == 0 ||head.x >= mapX || head.y >= mapY){
return 0;
}
return 1;
}
全部评论 8
请勿冒充洛谷官方,谢谢配合
2024-01-26 来自 浙江
1你这怎么这么卡啊(恼)
2024-01-25 来自 广东
0求不报错正版
2023-08-14 来自 广东
0行
( 不可能)
2023-08-15 来自 四川
0义父!!!
2024-01-25 来自 广东
0
为什么报错?
2023-08-14 来自 广东
0要用特殊头文件
2023-08-14 来自 四川
1就是防止抄代码
2023-08-14 来自 四川
0
为什么报错了啊
2023-08-14 来自 浙江
0要用特殊头文件
2023-08-14 来自 四川
1就是防止抄代码
2023-08-14 来自 四川
0那咋写啊
2023-08-14 来自 浙江
0
代码还能优化
2023-08-14 来自 广东
0第一行有错
2023-08-14 来自 广东
0用的特殊头文件
2023-08-14 来自 四川
0所以抄袭没用
2023-08-14 来自 四川
0
这是我的版本,做了一些改动,撞墙不噶,撞到自己就噶
https://www.acgo.cn/discuss/68972023-08-14 来自 广东
0
有帮助,赞一个