作者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