Giải Trí & Công Nghệ

Code game snake cơ bản bằng c++

bkk711

bkk711

Thành viên năng động
Member
Share Code game rắn săn mồi nake C++ .Game rắn săn mồi – snake là ứng dụng thướng có trên điện thoại, game đơn giản dễ chơi và code game sau đây được viết bài ngôn ngữ C chạy môi trường dos giúp bạn có thể chơi được trên máy tính (PC)
Mã:
Snake Game
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<string.h>
class Snake
{
int p1,p2,v1,v2,v3,e1,e2,prev,now,n,colr,dsp,cnt,dly,m;
int stp,egGen;
int xr,yr;
void caught();
public: long scr;
int strtX,strtY,endX,endY;
int pos[100][2];
void show();
void init();
void egg();
void transpose();
void gnrtCond();
void gnrtUnCond();
void check();
void checkEgg();
void move();
void chngDir();
void sndEt();
void sndCgt();
int test();
void score();
Snake();
Snake(Snake*);
~Snake();
};
Snake::Snake()
{
}
Snake::~Snake()
{
}
void Snake::checkEgg()
{
if((e1 == p1) && (e2 == p2))
{sndEt(); egg(); dly--; score(); n++; }
}
void Snake::sndEt()
{nosound();
sound(2500);
delay(2);
nosound();
}
void Snake::sndCgt()
{nosound();
for(int x=1000;x>0;x--)
{sound(x); delay(1); }
nosound();
}
void Snake::score()
{ char *p; ltoa(scr,p,10); settextstyle(8,0,1); setcolor(0); outtextxy(585,40,p); if(egGen != 1){ scr = scr + dly / 10; } ltoa(scr,p,10); setcolor(10); outtextxy(585,40,p);
}
void Snake::gnrtCond()
{if(n < 367)
{if(now == 8 && (prev != 8 && prev != 2)) {pos[0][0] = p1; pos[0][1] = p2 - dsp; prev = now; } if(now == 4 && (prev != 4 && prev != 1)) {pos[0][0] = p1 + dsp; pos[0][1] = p2; prev = now; } if(now == 2 && (prev != 8 && prev != 2)) {pos[0][0] = p1; pos[0][1] = p2 + dsp; prev = now; } if(now == 1 && (prev != 1 && prev != 4)) {pos[0][0] = p1 - dsp; pos[0][1] = p2; prev = now; }
}
}
void Snake::gnrtUnCond()
{ if( prev == 8 ) {pos[0][0] = p1; pos[0][1] = p2 - dsp; }
if( prev == 4 ) {pos[0][0] = p1 + dsp; pos[0][1] = p2; }
if( prev == 2 ) {pos[0][0] = p1; pos[0][1] = p2 + dsp; }
if( prev == 1 ) {pos[0][0] = p1 - dsp; pos[0][1] = p2; }
p1 = pos[0][0];
p2 = pos[0][1];
}
void Snake::check()
{
if(p1 > endX) {p1 = strtX;}
else if(p1 < strtX) {p1 = endX;}
if(p2 > endY) {p2 = strtY;}
else if(p2 < strtY) {p2 = endY;}
pos[0][0] = p1;
pos[0][1] = p2;
for(int i = 1;i < n;i++) { if(p1 == pos[i][0] && p2 == pos[i][1]) {caught(); break; }
}
}
void Snake::show()
{ int x = getcolor(); if(egGen != 1) { setcolor(getbkcolor()); setfillstyle(1,getbkcolor()); fillellipse(v1,v2,yr,yr); } else egGen = 0; if(egGen == 2) egGen--; setcolor(colr); setfillstyle(1,9); if(now == 8 || now == 2) fillellipse(pos[0][0],pos[0][1],xr,yr); else if(now == 4 || now == 1) fillellipse(pos[0][0],pos[0][1],yr,xr); setcolor(x);
}
void Snake::transpose()
{ int i,j,x,y; p1 = pos[0][0]; p2 = pos[0][1]; if(!egGen){ v1 = pos[n-1][0]; v2 = pos[n-1][1]; } else egGen = 0; for(i = n-1;i >= 1;i--) {pos[i][0] = pos[i-1][0]; pos[i][1] = pos[i-1][1]; }
}
void Snake::move()
{ int st = 0; do{ if(!kbhit()) {checkEgg(); if(!st) show(); else st = 0; delay(dly/4); transpose(); delay(dly/4); gnrtUnCond(); delay(dly/4); check(); delay(dly/4); } else if(stp){ chngDir(); gnrtCond(); check(); show(); st = 1; } }while(stp);
}
void Snake::init()
{time_t tm;
srand(time(&tm));
dsp = 20;
n = 5;
prev = 4;
for(int i = 4;i >= 0;i--)
{pos[i][0] = 201 + (n - i - 1) * dsp; pos[i][1] = 301; } strtX = 21; strtY = 21; endX = 481; endY = 361; colr = 14; now = prev; dsp = 20; stp = 111; cnt = -1; scr = 0; dly = 150; xr = 3; yr = 9; egg(); egGen = 1; score(); int x = getcolor(); setlinestyle(0,1,3); setcolor(15); rectangle(strtX-15,strtY-15,endX+15,endY+15); rectangle(endX+25,strtY-15,getmaxx()-15,endY+15); rectangle(strtX-15,endY+25,getmaxx()-15,getmaxy()-5); line(endX+25,strtY+75,getmaxx()-15,strtY+75); line(endX+25,strtY+200,getmaxx()-15,strtY+200); line(endX+25,strtY+275,getmaxx()-15,strtY+275); setlinestyle(0,1,1); settextstyle(8,0,1); setcolor(11); outtextxy(514,40,"SCORE"); setcolor(14); settextstyle(11,0,5); outtextxy(524,110," CONTROLS "); outtextxy(522,135,"p = PAUSE"); outtextxy(522,155,"g = RESUME"); outtextxy(522,175,"e = EXIT"); outtextxy(513,195,"ARROWS"); outtextxy(512,205," -MOVEMENT"); setcolor(14); settextstyle(4,0,9); outtextxy(getmaxx()-500,getmaxy()-110,"SNAKE"); settextstyle(8,0,1); setcolor(x);
}
void Snake::caught()
{
stp = 0;
sndCgt();
for(int i=0;i<=7;i++)
{if(i%2) {setcolor(10); outtextxy(512,250,"GAME OVER"); delay(900); } else {setcolor(0); outtextxy(512,250,"GAME OVER"); delay(500); } }
sleep(1);
}
void Snake::chngDir()
{int clr;
fillsettingstype *p;
char x = getch();
if(x == 72) now = 8;
else if(x == 77) now = 4;
else if(x == 80) now = 2;
else if(x == 75) now = 1;
else if(x == 'e') caught();
else if(x == 'p')
{//int y = getcolor(); int twnkl = 1; settextstyle(11,0,9); while(1) {if(kbhit()) {int c = getch(); if(c == 'g') {clr = getcolor(); setcolor(0); rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160); outtextxy(endX+60,endY-29,"PAUSE"); break; } } else {if(twnkl%2) {clr = getcolor(); setcolor(10); rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160); outtextxy(endX+60,endY-29,"PAUSE"); setcolor(clr); delay(1000); } else { clr = getcolor(); setcolor(0); rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160); outtextxy(endX+60,endY-29,"PAUSE"); delay(1000); } } twnkl++; } settextstyle(8,0,1);
}
}
Snake::Snake(Snake *p)
{
*p=NULL;
}
void Snake::egg()
{ do {e1 = (rand() % 100) * dsp + strtX; e2 = (rand() % 100) * dsp + strtY; }while(test()); int x = getcolor(); setcolor(7); setfillstyle(1,random(15)+1); fillellipse(e1,e2,xr+2,xr+2); setcolor(x); egGen = 2;
}
int Snake::test()
{ for(int i=0;i<n;i++) {if(e1 == pos[i][0] && e2 == pos[i][1]) break; if(v1 == e1 && v2 == e2) break; if((e1 >= endX+1) || (e2 >= endY+1)) break; }
if(i != n) return 1;
else return 0;
}
void main()
{Snake snk;
int gd=DETECT,gm,i,j,k,x,y;
clrscr();
initgraph(&gd,&gm,"E:\Turboc3");
snk.init();
snk.move();
closegraph();
restorecrtmode();
}
https://mega.nz/#!kpAFlaCB!SsyVJXx_-N1TzPjZBltSdBosY9JElsB5osvw5wUKizs
https://mega.nz/#!xhxBjKhC!l9rKfK4_wFFaOfRH61LCTzBsclk2s7fzbZbQFiu3Mu0
https://mega.nz/#!05g2TLZZ!wdKE2oFwzzVu-cL8ErYbvaBFHGaPOqvRhL6PLOcHewg
 
Bên trên