作者doyo (程式语言{D})
看板b92902xxx
标题[不知] 各位高手 能否帮小弟看看
时间Wed Apr 13 18:41:39 2005
#include<windows.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iostream>
//#include <iomanip.h> //不引出OMANIP时使用
//#include <utilwin32.h>
const char ESC = 0x1B; //逸出编码
using namespace std;
class snack
{ //蛇的物件
public:
bool visible; //以次代表蛇的长度
int x;
int y;
snack(void);
/*{ //建构元
visible = false;
x=0;
y=0;
}*/
};
snack::snack(void)
{
visible = false;
x=0;
y=0;
}
class Pos
{ //定义locate
private:
int x;
int y;
public:
Pos(int x,int y)
{
Pos::x = x; Pos::y=y;
}
void locate (ostream & os)
{
os << ESC << '[' << x << ';' << y << ']';
}
};
template <class Type> class OMANIP
{ //自iomanip.h引出样版
private:
Type i;
ostream& (*f)(ostream&,Type);
public:
OMANIP (ostream& (*ff)(ostream&, Type),Type ii) : f(ff), i(ii) {}
friend ostream& operator << (ostream& os,OMANIP& m)
{return m.f(os,m.i);}
};
ostream & locate(ostream& os,Pos xy) //Locate
{
if (os==cout)
xy.locate(os);
return(os);
}
OMANIP<Pos> locate(int x,int y)
{
Pos xy(x,y);
return ( OMANIP<Pos>(locate,xy) );
}
ostream& cls (ostream& os) //清除萤幕
{
if (os == cout)
os << ESC << "[2J";
return(os);
}
int main ()
{
srand(time(0)); //乱数种子
snack player[100]; //蛇最长可达50个
int direction = 0; //上=1 下=2 左=3 右=4
int c1,c2,i,j;
int comx,comy; //东西的座标
//定义
//绘制新东西
j=rand()%40;
comx = j*2;
j=rand()%24;
comy = j;
gotoxy(comx,comy);
cout << "★";
//蛇定义
player[0].visible = true;
player[0].x = 20;
player[0].y = 12;
gotoxy(player[0].x,player[0].y);
cout << "█";
direction = 4;
//游戏开始
begin:
if (kbhit())
{
c1 = getch();
if ((c1 == 0xe0)||(c1==00)) //当按上下左右键时
{
c2 = getch();
switch (c2)
{
case 72:direction = 1;break; //up
case 80:direction = 2;break; //down
case 75:direction = 3;break; //left
case 77:direction = 4;break; //right
}
}
else
{
gotoxy(40,12);
cout <<"离开游戏\n";
return(0);
}
}//end if
for ( i=98;i>=0;i--)
{ //蛇继续前进
if (player[i].visible == true)
{
//gotoxy(1,i*5+1);
//cout << i ;
if (player[i+1].visible == false)
{
gotoxy(player[i].x,player[i].y); //清原迹
cout << " ";
}
switch (direction)
{
case 1: //up
if (i==0) {player[0].y = player[0].y-1;}
else {player[i].x = player[i-1].x;player[i].y = player[i-1].y;}
break;
case 2: //down
if (i==0) {player[0].y = player[0].y+1;}
else {player[i].x = player[i-1].x;player[i].y = player[i-1].y;}
break;
case 3: //left
if (i==0) {player[0].x = player[0].x-2;}
else {player[i].x = player[i-1].x;player[i].y = player[i-1].y;}
break;
case 4: //right
if (i==0) {player[0].x = player[0].x+2;}
else {player[i].x = player[i-1].x;player[i].y = player[i-1].y;}
break;
//以上是采後一个等於前一个的座标
} // end case
gotoxy(player[i].x,player[i].y); //绘新物
cout << "█";
} // end if
} // end for
for (j=1;j<100;j++)
{ //碰到自己身体时
if ((player[0].x == player[j].x)&&(player[0].y == player[j].y)&&(player[j].visible=true))
{
gotoxy(40,12);
cout << "游戏结束\n";
return (0);
}
}
if ((player[0].x == comx)&&(player[0].y == comy))
{ //吃到东西时
for (j=1;j<100;j++)
{ //蛇加长
if (player[j].visible == false )
{
player[j].visible = true;
player[j].x = player[j-1].x;
player[j].y = player[j-1].y;
goto next1; //跳出for
} // end if
} // end for
next1:
//绘制新东西
j=rand()%38;
comx = j*2+2;
j=rand()%23;
comy = j+1;
gotoxy(comx,comy);
cout << "★";
for (j=0;j<100;j++)
{ //在身体上时
if ((comx==player[j].x)&&(comy==player[j].y))
goto next1;
}
else if ((player[0].x > 79)||(player[0].x < 1))
{ //碰到左右两避时
gotoxy(40,12);
cout << "游戏结束\n";
return (0);
}
else if ((player[0].y > 23)||(player[0].y < 1))
{ //碰到上下两避时
gotoxy(40,12);
cout << "游戏结束\n";
return (0);
}
Sleep(100); //游戏延迟
goto begin; //继续游戏直到按ESC离开
// cout <<"direction="<<direction<<'\n';
system("pause");
return 0;
}
=================================
跑不出来
我的贪食蛇
(泣)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.49.155
1F:推 lfst:好眼熟..这不是C++嘛= =140.112.246.171 04/13
2F:→ egria:建议你拿去C_and_CPP版 问问看 61.224.64.123 04/13