最近有点闲昨天中午搞个好玩的,vc6控制台编译,有兴趣的试试看。
我很懒不怎么上Blog的,有C++的可以试一试啊
// main.cpp
#include <windows.h>
#include <ctime>
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
srand(time(NULL));
// 初始化地图 和 蛇
char map[30][40];
memset(map, ' ', sizeof(map));
for(int i=0; i<30; i++)
{
map[i][0] = '#';
map[i][39] = '#';
}
for(i=0; i<40; i++)
{
map[0][i] = '#';
map[29][i] = '#';
}
map[10][20]='$';
list<int> snake;
snake.push_back(10*256+10);
snake.push_back(9*256+10);
snake.push_back(8*256+10);
int score = 0;
while(true)
{
// 处理键盘 找出方向
static char dir = 'R';
if(GetAsyncKeyState(VK_UP) && dir!='D')
dir='U';
else if(GetAsyncKeyState(VK_DOWN) && dir!='U')
dir='D';
else if(GetAsyncKeyState(VK_LEFT) && dir!='R')
dir='L';
else if(GetAsyncKeyState(VK_RIGHT) && dir!='L')
dir='R';
// 找出下一点
int dx=0, dy=0;
if(dir=='U')
dy=-1;
if(dir=='D')
dy=1;
if(dir=='L')
dx=-1;
if(dir=='R')
dx=1;
int nextX=snake.front()/256+dx;
int nextY=snake.front()%256+dy;
// 碰撞检测
list<int>::iterator findResult = find(snake.begin(), snake.end(), nextX*256+nextY);
bool inSnake = findResult!=snake.end();
if(inSnake)// 撞自己
{
break;
}
else if(map[nextY][nextX]=='#')// 撞墙
{
break;
}
else if(map[nextY][nextX]=='$')// 撞吃的
{
score+=100;
map[nextY][nextX]=' ';
snake.push_front(nextX*256+nextY);
int fruitX, fruitY;
while(true)
{
fruitX = rand()%40;
fruitY = rand()%30;
list<int>::iterator findResult = find(snake.begin(), snake.end(), fruitX*256+fruitY);
bool inSnake = findResult!=snake.end();
if( (!inSnake) && (map[fruitY][fruitX]==' ') )
break;
};
map[fruitY][fruitX]='$';
}
else// 行动
{
snake.push_front(nextX*256+nextY);
snake.pop_back();
}
// 显示
char map2[30][40];
memcpy(map2, map, sizeof(map));
for(list<int>::iterator p=snake.begin(); p!=snake.end(); p++)
{
int x=(*p)/256;
int y=(*p)%256;
map2[y][x] = 'O';
}
map2[nextY][nextX]='@';
system("cls");
for(int i=0; i<30; i++)
{
for(int j=0; j<40; j++)
{
cout<<map2[i][j];
}
cout<<endl;
}
cout<<"score: "<<score<<endl;
_sleep(250);
}
cout<<"Game Over"<<endl;
system("pause");
}