1. WASD 控制角色的面向及行走;
2. Tab 开启/关闭地图;
3. 空格键跳跃;
4. Ctrl+鼠标左键点李孝击可以攻击怪物;
5. 鼠标右键点击可以使用物品;
6. 1-9键可以使用英雄背包里的物品;
7. Shift+鼠标左键可以普通拾取;
8. Shift+鼠标右键可以快速拾取;
9. F1-F5键可以使用快捷键功能;
10. Enter键用于哪链稿聊天;
问题一:其实主要是else语句弄巧成拙了。如果你希望point.X小于等于2的时候方块就不能往左移动了,那对应的当它小于2时,你不做汪备任何处理,他困陵顷不就停在那里不动了吗?
问题二:
最后要记得用CloseHandle关闭句柄
问题三:
两个函数的最后一个参数用NULL会出错,应该这样用:
DWORD written
FillConsoleOutputAttribute(hand,colour,len,point,&written)
WriteConsoleOutputCharacter(hand,string,len,point,&written)
这种用法参考自:
http://hi.baidu.com/console_app/blog/item/30488bec119a5a4779f055df.html
其实我也看到网上有个教程里就这样用,但是在codeblocks下运行程序会出错,改过来就可以运行了
此外我加了一个输出方块当前位置的语句,你可以看出,由于■在dos窗口上占两个字节的宽汪陆度,因此即使你按一下方向键,对应坐标也会变化2个单位。
简单改了一下。我建议还是用函数实现好一点,因为这个程序中类似的代码段重复出现,使程序变得很长。
代码:
#include<iostream>
#include<iomanip>
#include<windows.h>
using namespace std
int main()
{
int x=4
int y=4
HANDLE hand
hand=GetStdHandle(STD_OUTPUT_HANDLE)
int colour=200
int len=2
COORD point
point.X=x
point.Y=y
char *string="■"
SMALL_RECT rt = {0,0,35,35}// 窗口尺寸
SetConsoleWindowInfo(hand,true,&rt)// 由于DOS默认只有25行,为了便于观察,把dos窗口行数调为35,这个也可以用system函数实现
DWORD written
FillConsoleOutputAttribute(hand,colour,len,point,&written)
WriteConsoleOutputCharacter(hand,string,len,point,&written)
INPUT_RECORD keyRec
DWORD res
HANDLE hnd
hnd=GetStdHandle(STD_INPUT_HANDLE)
for()
{
cout<<setfill('0')<<"("<<setw(2)<<point.X<<","<<setw(2)<<point.Y<<")"
ReadConsoleInput(hnd,&keyRec,1,&res)
if(keyRec.EventType==KEY_EVENT)
{
if(keyRec.Event.KeyEvent.wVirtualKeyCode==65)
{
if(point.X>2) // 这里不用那么麻烦,因为按a时只会使X减小,下同
{
FillConsoleOutputAttribute(hand,1,len,point,&written)
WriteConsoleOutputCharacter(hand," ",len,point,&written)
point.X-=1
FillConsoleOutputAttribute(hand,colour,len,point,&written)
WriteConsoleOutputCharacter(hand,string,len,point,&written)
}
}
if(keyRec.Event.KeyEvent.wVirtualKeyCode==68)
{
if(point.X<30)
{
FillConsoleOutputAttribute(hand,1,len,point,&written)
WriteConsoleOutputCharacter(hand," ",len,point,&written)
point.X+=1
FillConsoleOutputAttribute(hand,colour,len,point,&written)
WriteConsoleOutputCharacter(hand,string,len,point,&written)
}
}
if(keyRec.Event.KeyEvent.wVirtualKeyCode==87)
{
if(point.Y>2)
{
FillConsoleOutputAttribute(hand,1,len,point,&written)
WriteConsoleOutputCharacter(hand," ",len,point,&written)
point.Y-=1
FillConsoleOutputAttribute(hand,colour,len,point,&written)
WriteConsoleOutputCharacter(hand,string,len,point,&written)
}
}
if(keyRec.Event.KeyEvent.wVirtualKeyCode==83)
{
if(point.Y<30)
{
FillConsoleOutputAttribute(hand,1,len,point,&written)
WriteConsoleOutputCharacter(hand," ",len,point,&written)
point.Y+=1
FillConsoleOutputAttribute(hand,colour,len,point,&written)
WriteConsoleOutputCharacter(hand,string,len,point,&written)
}
}
}
cout<<"\b\b\b\b\b\b\b"
}
// 最后记得关闭
CloseHandle(hand)
CloseHandle(hnd)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)