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循環,因為懶‘''___'''’
//還有許多要優化的地方
總結
以上是生活随笔為你收集整理的C++小游戏 双人贪吃蛇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcGis之椭球面积计算工具
- 下一篇: Windows10下如何找到开机时的桌面