控制台程序用键盘 *** 作字符移动的小程序,请高手指点一下啊

控制台程序用键盘 *** 作字符移动的小程序,请高手指点一下啊,第1张

问题一:

其实主要是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

}

这个跟java没有关系,你看看html里宏孙有这个标签,你只要将字符串写到相应的标签里面就可以实现移动,我好想记着标签叫<marquee>你想要移动的字</marquee>

它还有很多属性,

loop=“1”是循环次歼燃数

direction=up down left right 移动方向

direction 是设置文字的滚动方向

scrollmount=“8” 是设置氏绝虚速度的

可以用微信小程序来实现手机屏幕流动文字。

步骤如下:

1、在手机桌面找棚李到设置嫌冲,点击打开。

2、在微信搜索栏内输入“手持d幕”。

3、之后进入小程序,找到流动文字输入。

4、输入想要的文字。

5、即可手机屏幕流动设置链者迟。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12409511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存