网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月02日
漏签
0
天
easyx吧
关注:
10,920
贴子:
46,899
看贴
图片
吧主推荐
游戏
1
2
下一页
尾页
34
回复贴,共
2
页
,跳到
页
确定
<<返回easyx吧
>0< 加载中...
如何让玩家按任意键以后退出游戏? 这么写貌似不行……
只看楼主
收藏
回复
斯普林特老师
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
void GameOver()
{
Sleep(1000);
setcolor(RED);
setfont(16,0,"Tahoma");
outtextxy(500,240,"Game Over");
Sleep(1000);
char temp=getch();
return;
}
这么写的话 Game Over出现之后不等玩家按键就直接退了,怀疑是getch把之前玩家的按键给读进来了……求解决方法……
贴吧用户_0VZPPy8
初一年级
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
看这样行不行,不要定义变量了
void GameOver()
{
Sleep(1000);
setcolor(RED);
setfont(16,0,"Tahoma");
outtextxy(500,240,"Game Over");
Sleep(1000);
getch();
return;
}
stophin
四年级
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
fflush(stdin)
或者
flushall()
斯普林特老师
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
void GameOver()
{
Sleep(1000);
setcolor(RED);
setfont(16,0,"Tahoma");
outtextxy(500,240,"Game Over");
Sleep(1000);
flushall();//新增的
_getch();
return;
}
经过试验还是不行,仍然自己退……
斯普林特老师
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
void GameOver()
{
Sleep(1000);
setcolor(RED);
setfont(16,0,"Tahoma");
outtextxy(500,240,"Game Over");
Sleep(1000);
flushall();//新增的
_getch();
return;
}
int WolfMove(int map[21][21], dtype &Wolf, dtype Player)
{
//移动中
if( (map[Wolf.x][Wolf.y]&PLAYER) ==PLAYER)
{
GameOver();
return 1;
}
map[Wolf.x][Wolf.y]+=WOLF;
return 0;
}
int main()
{
//玩家移动
else if( (map[Player.x][Player.y]&WOLF)==WOLF)
{
GameOver();
break;
}
}
斯普林特老师
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我还是决定放全部代码了……至少它能编译运行,而且还不算是特别长……
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include<iostream>
#include<time.h>
using namespace std; // The map is 20x20, and each square is 24*24
// The initial coodernate of player is (10,10) #define GRASS 1
#define PLAYER 2
#define WOLF 4 #define KEY_DOWN(vk_c) ( GetAsyncKeyState(vk_c) & 0x8000 ? 1 : 0) struct dtype
{
int x;
int y;
}; void DrawLines()
{
int i;
setcolor(WHITE);
for(i=0;i<=480;i+=24)
line(i,0,i,480);
for(i=0;i<=480;i+=24)
line(0,i,480,i);
line(0,479,480,479);
} int GenerateGrass(int map[21][21])
{
srand((unsigned)time(NULL));
int number;
int low=24*6, high=24*12;
number=rand()%(high-low) + low; int i;
int nowx,nowy;
for(i=1;i<=number;i++)
{
nowx=rand()%20+1;
nowy=rand()%20+1;
if((map[nowx][nowy]&GRASS) !=GRASS && (nowx!= 10 || nowy!=10) )
{
map[nowx][nowy]+=GRASS;
setcolor(GREEN);
outtextxy(nowx*24-14,nowy*24-20,"/");
}
else
i--;
}
return number;
} dtype GenerateWolf ( int map[21][21] )
{
srand(unsigned(time(NULL)));
dtype wolf;
while(true)
{
wolf.x=rand()%20+1;
wolf.y=rand()%20+1;
if( abs(wolf.x-10) + abs(wolf.y-10) >=3 )
{
map[wolf.x][wolf.y]+=WOLF;
setfillstyle(BLUE);
bar((wolf.x-1)*24+3, (wolf.y-1)*24+3, wolf.x*24-3, wolf.y*24-3);
break;
}
}
return wolf;
} void DrawRabbit(int x, int y, int style)//style==1: Draw; style==2:delete
{
if(style==1)
{
setfillstyle(RED);
setcolor(RED);
fillcircle(x*24-12, y*24-12,8);
}
else if(style==2)
{
setfillstyle(BLACK);
setcolor(BLACK);
fillcircle(x*24-12, y*24-12,8);
}
} void DrawWolf(int x, int y, int style, int grass)//1=draw 2=delete
{
if(style==1)
{
setfillstyle(BLUE);
bar((x-1)*24+3, (y-1)*24+3, x*24-3, y*24-3);
}
else if(style==2)
{
setfillstyle(BLACK);
bar((x-1)*24+3, (y-1)*24+3, x*24-3, y*24-3);
if( grass==1)
{
setcolor(GREEN);
outtextxy(x*24-14,y*24-20,"/");
}
}
} void GameOver()
{
Sleep(1000);
setcolor(RED);
setfont(16,0,"Tahoma");
outtextxy(500,240,"Game Over");
Sleep(1000);
flushall();
_getch();
return;
} int WolfMove(int map[21][21], dtype &Wolf, dtype Player)
{
map[Wolf.x][Wolf.y]-=WOLF;
bool have_grass=false;
if((map[Wolf.x][Wolf.y]&GRASS)==GRASS)
have_grass=true; DrawWolf(Wolf.x, Wolf.y, 2,have_grass);
if(Wolf.x>Player.x)
Wolf.x--;
else if(Wolf.x<Player.x)
Wolf.x++;
else if(Wolf.y>Player.y)
Wolf.y--; else if(Wolf.y<Player.y)
Wolf.y++;
DrawWolf(Wolf.x, Wolf.y, 1,have_grass); if( (map[Wolf.x][Wolf.y]&PLAYER) ==PLAYER)
{
GameOver();
斯普林特老师
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
return 1;
}
map[Wolf.x][Wolf.y]+=WOLF;
return 0;
}
void InStage(int map[21][21])
{
memset(map,0,sizeof(int)*21*21);
DrawLines();
int GrassNum;
GrassNum=GenerateGrass(map); DrawRabbit(10,10,1);
map[10][10]+=PLAYER; dtype Wolf;
Wolf=GenerateWolf(map);
dtype Player;
Player.x=10;
Player.y=10;
int score=0;
int PlayerGrass=0;
char outscore[20]={0};
outtextxy(500,100,"0");
clock_t t1=clock();
clock_t t2;
while(true)
{
if(KEY_DOWN(VK_UP) && Player.y>=2)
{
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.y--;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
if(KEY_DOWN(VK_DOWN) && Player.y<=19)
{
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.y++;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
if(KEY_DOWN(VK_LEFT) && Player.x>=2)
{
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.x--;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
if(KEY_DOWN(VK_RIGHT) && Player.x<=19)
{
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.x++;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
if( (map[Player.x][Player.y]&GRASS)==GRASS)
{
score+=20;
PlayerGrass++;
map[Player.x][Player.y]-=GRASS;
sprintf(outscore, "%d", score);
outtextxy(500,100,outscore);
}
else if( (map[Player.x][Player.y]&WOLF)==WOLF)
{
GameOver();
break;
} if((map[Player.x][Player.y]&PLAYER) == 0)
map[Player.x][Player.y]+=PLAYER;
t2=clock();
if(t2-t1>200)
{
int judge=0;
judge=WolfMove(map,Wolf,Player);
if(judge==1)//gameover
break;
t1=t2;
}
}
//debugdisplay();
}
int main()
{
initgraph(640, 480); int map[21][21];//map=20*20
InStage(map);
closegraph();
}
不知道为什么一放上来缩进就变恶心了……
贴吧用户_0VZPPy8
初一年级
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
要不用百度网盘之类的发出来,这样就没有这个问题了
斯普林特老师
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
还真是个好主意…… 这是源代码 http:/
/pan.baidu.com/share/link?shareid=154828&uk=3154460426
FEtang919
六年级
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不用getch,用while(!kbhit());如果仍退出,while前面加个键盘缓存清空函数.
——来自 诺基亚 RM-822_apac_prc_204
贴吧用户_0VZPPy8
初一年级
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我好像弄出来了,不过还是有一些bug搞不懂。
首先搞一个变量接受按键信息,int abc;,然后每次按个键就存进去
if(KEY_DOWN(VK_UP) && Player.y>=2)
{
abc=getch();
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.y--;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
else if(KEY_DOWN(VK_DOWN) && Player.y<=19)
{
abc=getch();
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.y++;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
else if(KEY_DOWN(VK_LEFT) && Player.x>=2)
{
abc=getch();
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.x--;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
else if(KEY_DOWN(VK_RIGHT) && Player.x<=19)
{
abc=getch();
map[Player.x][Player.y]-=PLAYER;
DrawRabbit(Player.x, Player.y,2);
Player.x++;
DrawRabbit(Player.x, Player.y,1);
Sleep(100);
}
这样可以吧按键搞到变量里去,然后,都搞几个getch(),可以来调试
void GameOver()
{
Sleep(3000);
setcolor(RED);
setfont(16,0,"Tahoma");
outtextxy(500,240,"Game Over");
// Sleep(1000);
// flushall();
_getch();
getch();
_getch();
getch();
// closegraph();
// return;
}
不过偶尔会出现对方也不动的的情况,不知道是不是我改动引起的。
改的比较粗糙阿,见谅
yangw80
吧主
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
看到代码了。
要是用 flushall() 不行,就试试这个:
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
_getch();
应该是肯定没问题的,呵呵。
采蘑菇的小迷糊
学前班
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
bar((x-1)*24+3, (y-1)*24+3, x*24-3, y*24-3) 能问一下这是什么意思么?我刚学有点不懂
FEtang919
六年级
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
getch多恶心
——来自 诺基亚 Lumia 920
烜宣
五年级
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不知道exit(0);这句是否可以解决你的问题?
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示