C++小游戏 双人贪吃蛇

                                           C++小游戏         双人贪吃蛇

一个双人贪吃蛇的C++源代码

要使用easyX

我这里用得是VS2012版

具体内容如下:

#include <stdio.h>
#include "graphics.h"
#include <mmsystem.h>
#include <conio.h>
#include <stdlib.h>
#define SNAKE_NUM 500
#pragma comment(lib,"winmm.lib") 

void Stop();
void Eatfood();
void Huitu();
void snakeMove();
void Cushihua();
void WeiyiPD();
void Key();
void zhuangji();

enum DIR
{
  UP,
  DOWN,
  LEFT,
  RIGHT,
};
struct Snake
{
  
  int size;
  bool life;
  int dir;
  int speed;
  POINT coor[SNAKE_NUM];
}snake1,snake2;

struct FOOD
{
    int x;
    int y;
    bool flag;
    int r;
    DWORD color;
}food1,food2,food3,food4;

int main()
{
initgraph(1000,650);


Cushihua();

while(1)
{
Huitu();
snakeMove();
Key();
Eatfood();
zhuangji();
Sleep(10);
}

  return 0;
}

void Key()

   int i;
   i=0;
   int j;
   j=0;
   if(_kbhit())
{
    switch(_getch())
    {
     case 72:
           if(snake1.dir!=DOWN){
            snake1.dir=UP;}
            break;
     case 80:
           if(snake1.dir!=UP){
            snake1.dir=DOWN;}
            break;
     case 75:
           if(snake1.dir!=RIGHT){
            snake1.dir=LEFT;}
            break;
     case 77:
           if(snake1.dir!=LEFT){
            snake1.dir=RIGHT;}
            break;
     case '.':
             while(1)
             {
                Sleep(3000);i=1;
                if(i=1)return;
             }
     case 'w':
           if(snake2.dir!=DOWN){
            snake2.dir=UP;}
            break;
     case 's':
           if(snake2.dir!=UP){
            snake2.dir=DOWN;}
            break;
     case 'a':
           if(snake2.dir!=RIGHT){
            snake2.dir=LEFT;}
            break;
     case 'd':
           if(snake2.dir!=LEFT){
            snake2.dir=RIGHT;}
            break;
     case 'h':
             while(1)
             {
                Sleep(3000);j=1;
                if(j=1)return;
             }
         
     }
}
}
void Huitu()
{
   
   BeginBatchDraw();
   setbkcolor(RGB(28,115,119));
   cleardevice();
if(snake1.life)
{
   for(int i=0;i<snake1.size;i++)
   {
   solidcircle(snake1.coor[i].x,snake1.coor[i].y,5);
   }
}
if(snake2.life)
{
   for(int j=0;j<snake2.size;j++)
   {
   solidcircle(snake2.coor[j].x,snake2.coor[j].y,5);
   }
}
   if(food1.flag)
   {
     solidcircle(food1.x,food1.y,food1.r);
   }
   if(food2.flag)
   {
     solidcircle(food2.x,food2.y,food2.r);
   }
   if(food3.flag)
   {
     solidcircle(food3.x,food3.y,food3.r);
   }
   if(food4.flag)
   {
     solidcircle(food4.x,food4.y,food4.r);
   }
   EndBatchDraw();
}

void snakeMove()
{
if(snake1.life)
{
   for(int i=snake1.size-1;i>0;i--)
   {
       snake1.coor[i]=snake1.coor[i-1];
    }
   switch (snake1.dir)
   {
      case UP:
      snake1.coor[0].y-=snake1.speed;
      if( snake1.coor[0].y+10<=0)
      {
        snake1.coor[0].y=650;
       }
      break;
      case DOWN:
      snake1.coor[0].y+=snake1.speed;
       if( snake1.coor[0].y-10>=650)
      {
        snake1.coor[0].y=0;
       }
      break;
      case LEFT:
      snake1.coor[0].x-=snake1.speed;
      if( snake1.coor[0].x+10<=0)
      {
        snake1.coor[0].x=1000;
       }
      break;
      case RIGHT:
      snake1.coor[0].x+=snake1.speed;
      if( snake1.coor[0].x-10>=1000)
      {
        snake1.coor[0].x=0;
       }
      break;
   }
}
if(snake2.life)
{
   for(int j=snake2.size-1;j>0;j--)
   {
       snake2.coor[j]=snake2.coor[j-1];
    }
   switch (snake2.dir)
   {
      case UP:
      snake2.coor[0].y-=snake2.speed;
      if( snake2.coor[0].y+10<=0)
      {
        snake2.coor[0].y=650;
       }
      break;
      case DOWN:
      snake2.coor[0].y+=snake2.speed;
       if( snake2.coor[0].y-10>=650)
      {
        snake2.coor[0].y=0;
       }
      break;
      case LEFT:
      snake2.coor[0].x-=snake2.speed;
      if( snake2.coor[0].x+10<=0)
      {
        snake2.coor[0].x=1000;
       }
      break;
      case RIGHT:
      snake2.coor[0].x+=snake2.speed;
      if( snake2.coor[0].x-10>=1000)
      {
        snake2.coor[0].x=0;
       }
      break;
   }
}
}


void Cushihua()
{
  mciSendString("open ./音域/yy.mp3 alias BGM",0,0,0);
  mciSendString("play BGM repeat",0,0,0);

//音乐
  snake1.size=33;
  snake1.life=true;
  snake1.dir;
  snake1.speed=1;
  for(int i=0;i<snake1.size;i++)
 {
  snake1.coor[0].x=100-10*i;
  snake1.coor[0].y=10;
  }
  snake2.size=33;
  snake2.life=true;
  snake2.dir;
  snake2.speed=1;
  for(int j=0;j<snake2.size;j++)
 {
  snake2.coor[0].x=500-10*j;
  snake2.coor[0].y=10;
  }
  srand(GetTickCount());
  food1.x=rand()%1000;
  food1.y=rand()%650;
  food1.color=RGB(rand()%256,rand()%256,rand()%256);
  food1.r=rand()%10+5;
  food1.flag=true;
  food2.x=rand()%1000;
  food2.y=rand()%650;
  food2.color=RGB(rand()%256,rand()%256,rand()%256);
  food2.r=rand()%10+5;
  food2.flag=true;
  food3.x=rand()%1000;
  food3.y=rand()%650;
  food3.color=RGB(rand()%256,rand()%256,rand()%256);
  food3.r=rand()%10+5;
  food3.flag=true;
  food4.x=rand()%1000;
  food4.y=rand()%650;
  food4.color=RGB(rand()%256,rand()%256,rand()%256);
  food4.r=rand()%10+5;
  food4.flag=true;
}

void Eatfood()
{
   if(food1.flag&&snake1.coor[0].x>=food1.x-food1.r&&snake1.coor[0].x<=food1.x+food1.r&&
      snake1.coor[0].y>=food1.y-food1.r&&snake1.coor[0].y<=food1.y+food1.r)
   {
     food1.flag=false;
     snake1.size+=11;
   }
   if(!food1.flag)
   {
  food1.x=rand()%1000;
  food1.y=rand()%650;
  food1.color=RGB(rand()%256,rand()%256,rand()%256);
  food1.r=rand()%10+5;
  food1.flag=true;
  }
   if(food2.flag&&snake1.coor[0].x>=food2.x-food2.r&&snake1.coor[0].x<=food2.x+food2.r&&
      snake1.coor[0].y>=food2.y-food2.r&&snake1.coor[0].y<=food2.y+food2.r)
   {
     food2.flag=false;
     snake1.size+=11;
   }
   if(!food2.flag)
   {
  food2.x=rand()%1000;
  food2.y=rand()%650;
  food2.color=RGB(rand()%256,rand()%256,rand()%256);
  food2.r=rand()%10+5;
  food2.flag=true;
  }
   if(food3.flag&&snake1.coor[0].x>=food3.x-food3.r&&snake1.coor[0].x<=food3.x+food3.r&&
      snake1.coor[0].y>=food3.y-food3.r&&snake1.coor[0].y<=food3.y+food3.r)
   {
     food3.flag=false;
     snake1.size+=11;
   }
   if(!food3.flag)
   {
  food3.x=rand()%1000;
  food3.y=rand()%650;
  food3.color=RGB(rand()%256,rand()%256,rand()%256);
  food3.r=rand()%10+5;
  food3.flag=true;
  }
   if(food4.flag&&snake1.coor[0].x>=food4.x-food4.r&&snake1.coor[0].x<=food4.x+food4.r&&
      snake1.coor[0].y>=food4.y-food4.r&&snake1.coor[0].y<=food4.y+food4.r)
   {
     food4.flag=false;
     snake1.size+=11;
   }
   if(!food4.flag)
   {
  food4.x=rand()%1000;
  food4.y=rand()%650;
  food4.color=RGB(rand()%256,rand()%256,rand()%256);
  food4.r=rand()%10+5;
  food4.flag=true;
  }

if(food1.flag&&snake2.coor[0].x>=food1.x-food1.r&&snake2.coor[0].x<=food1.x+food1.r&&
      snake2.coor[0].y>=food1.y-food1.r&&snake2.coor[0].y<=food1.y+food1.r)
   {
     food1.flag=false;
     snake2.size+=11;
   }
   if(!food1.flag)
   {
  food1.x=rand()%1000;
  food1.y=rand()%650;
  food1.color=RGB(rand()%256,rand()%256,rand()%256);
  food1.r=rand()%10+5;
  food1.flag=true;
  }
   if(food2.flag&&snake2.coor[0].x>=food2.x-food2.r&&snake2.coor[0].x<=food2.x+food2.r&&
      snake2.coor[0].y>=food2.y-food2.r&&snake2.coor[0].y<=food2.y+food2.r)
   {
     food2.flag=false;
     snake2.size+=11;
   }
   if(!food2.flag)
   {
  food2.x=rand()%1000;
  food2.y=rand()%650;
  food2.color=RGB(rand()%256,rand()%256,rand()%256);
  food2.r=rand()%10+5;
  food2.flag=true;
  }
   if(food3.flag&&snake2.coor[0].x>=food3.x-food3.r&&snake2.coor[0].x<=food3.x+food3.r&&
      snake2.coor[0].y>=food3.y-food3.r&&snake2.coor[0].y<=food3.y+food3.r)
   {
     food3.flag=false;
     snake2.size+=11;
   }
   if(!food3.flag)
   {
  food3.x=rand()%1000;
  food3.y=rand()%650;
  food3.color=RGB(rand()%256,rand()%256,rand()%256);
  food3.r=rand()%10+5;
  food3.flag=true;
  }
   if(food4.flag&&snake2.coor[0].x>=food4.x-food4.r&&snake2.coor[0].x<=food4.x+food4.r&&
      snake2.coor[0].y>=food4.y-food4.r&&snake2.coor[0].y<=food4.y+food4.r)
   {
     food4.flag=false;
     snake2.size+=11;
   }
   if(!food4.flag)
   {
  food4.x=rand()%1000;
  food4.y=rand()%650;
  food4.color=RGB(rand()%256,rand()%256,rand()%256);
  food4.r=rand()%10+5;
  food4.flag=true;
  }
}


void zhuangji()
{
int i,j;
for(i=0;i<=snake2.size-1;i++)
{
if(snake1.life&&snake1.coor[0].x>=snake2.coor[i].x-5&&snake1.coor[0].x<=snake2.coor[i].x+5&&
      snake1.coor[0].y>=snake2.coor[i].y-5&&snake1.coor[0].y<=snake2.coor[i].y+5)
  snake1.life=false;
}
for(j=0;j<=snake1.size-1;j++)
{
if(snake2.life&&snake2.coor[0].x>=snake1.coor[j].x-5&&snake2.coor[0].x<=snake1.coor[j].x+5&&
      snake2.coor[0].y>=snake1.coor[j].y-5&&snake2.coor[0].y<=snake1.coor[j].y+5)
  snake2.life=false;
}
}

//有些地方没用for循环,因为懒‘''___'''’

//还有许多要优化的地方

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
贪吃是一种经典的小游戏,编程实现它可以让我们更好地理解游戏开发的基本原理。下面是一个简单的贪吃游戏的编程代码: 1. 导入必要的模块: ```python import pygame import random ``` 2. 初始化游戏: ```python pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("贪吃") ``` 3. 定义贪吃类: ```python class Snake(): def __init__(self): self.head_x = 300 self.head_y = 300 self.body = [[self.head_x, self.head_y]] self.speed_x = 0 self.speed_y = 0 def change_direction(self, direction): if direction == "up" and self.speed_y != 20: self.speed_x = 0 self.speed_y = -20 elif direction == "down" and self.speed_y != -20: self.speed_x = 0 self.speed_y = 20 elif direction == "left" and self.speed_x != 20: self.speed_x = -20 self.speed_y = 0 elif direction == "right" and self.speed_x != -20: self.speed_x = 20 self.speed_y = 0 def move(self): self.head_x += self.speed_x self.head_y += self.speed_y self.body.insert(0, [self.head_x, self.head_y]) self.body.pop() ``` 4. 定义食物类: ```python class Food(): def __init__(self): self.x = random.randint(0, 39) * 20 self.y = random.randint(0, 29) * 20 def draw(self): pygame.draw.rect(screen, (255, 0, 0), (self.x, self.y, 20, 20)) ``` 5. 游戏主循环: ```python snake = Snake() food = Food() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: snake.change_direction("up") elif event.key == pygame.K_DOWN: snake.change_direction("down") elif event.key == pygame.K_LEFT: snake.change_direction("left") elif event.key == pygame.K_RIGHT: snake.change_direction("right") snake.move() if snake.body[0] == [food.x, food.y]: food = Food() snake.body.append(snake.body[-1]) screen.fill((0, 0, 0)) for segment in snake.body: pygame.draw.rect(screen, (0, 255, 0), (segment[0], segment[1], 20, 20)) food.draw() pygame.display.update() pygame.quit() ``` 通过以上代码,我们实现了一个简单的贪吃游戏。玩家可以通过上下左右箭头控制的移动方向,如果吃到了食物,的身体会变长。这个小游戏代码只是一个简单的示例,你可以根据需求来添加更多的功能和特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geometry_S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值