求高手指点汇编语言的一个课程设计题目,小球碰壁

求高手指点汇编语言的一个课程设计题目,小球碰壁,第1张

MOV AH, 4CH

INT 21H

这不就是退出的代码吗?

退出子程序的代码:RET。

退出中断程序的代码:IRET。

----

哦,楼主的程序中,缺少检测键盘的程序段。

所以,运行起来,键盘就控制不了程序了。

这时,只能用 ALT+TAB 来切换。

在程序中,加入检测键盘的程序段,即可。

不要加《等待按键输入》的,要加《不等待输入的》。

你自己查查把,是几号中断调用,我记不住了。

当没有按键,程序仍然自动运行。

当有人按键,程序就停下来,对键值进行判断,该退出就退出。

定义变量 CPoint pos //坐标位置

int vx, vy //速度

CBrush bru //画刷

CPen pen //画笔

在构造函数里初始化变量:pos.x = 100

pos.y = 100

vx = vy =5

bru.CreateSolidBrush(RGB(255, 0, 0))

pen.CreatePen(PS_SOLID, 5, RGB(255, 0, 0))

画图函数里:void CSmallBallView::OnDraw(CDC* pDC)

{

CSmallBallDoc* pDoc = GetDocument()

ASSERT_VALID(pDoc)

CClientDC dc(this)

dc.SelectObject(&bru)

dc.SelectObject(&pen)

Ellipse(dc, pos.x-25, pos.y-25, pos.x+25, pos.y+25)

// TODO: add draw code for native data here

}

定时器:void CSmallBallView::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

pos.x += vx

pos.y += vy

CRect rect = NULL

GetWindowRect(&rect)

if(pos.x+25>=rect.Width())

{

bru.DeleteObject()

pen.DeleteObject()

bru.CreateSolidBrush(RGB(255, 0, 0))

pen.CreatePen(PS_SOLID, 5, RGB(255, 0, 0))

vx = -vx

}

if(pos.x-25<=0)

{

bru.DeleteObject()

pen.DeleteObject()

bru.CreateSolidBrush(RGB(0, 0, 255))

pen.CreatePen(PS_SOLID, 5, RGB(0, 0, 255))

vx = -vx

}

if(pos.y+25>=rect.Height())

{

bru.DeleteObject()

pen.DeleteObject()

bru.CreateSolidBrush(RGB(0, 255, 0))

pen.CreatePen(PS_SOLID, 5, RGB(0, 255, 0))

vy = -vy

}

if(pos.y-25<=0)

{

bru.DeleteObject()

pen.DeleteObject()

bru.CreateSolidBrush(RGB(255, 255, 0))

pen.CreatePen(PS_SOLID, 5, RGB(255, 255, 0))

vy = -vy

}

CClientDC dc(this)

OnDraw(&dc)

Invalidate()

CView::OnTimer(nIDEvent)

}

在菜单里添加一个子菜单,用来启动定时器:void CSmallBallView::OnStart()

{

// TODO: Add your command handler code here

SetTimer(1, 10, NULL)

}

大概就这样啦!

假设高的移动速度为v1,横的移动速度为v2,小球的控件名为Ball

dim v1 as integer

dim v2 as integer

'下面为小球的移动

Ball.top=ball.top+v'向着右下移动

ball.left=ball.left+v

if ball.top>=me.top then'撞击底部

v1=v1*-1'重点:此处将高的移动速度乘以-1,表示让其反方向移动,下面同样

endif

if ball.left>=me.left then'撞击右边

v2=v2*-1

endif

if ball.top=<0 then'撞击顶部

v1=v1*-1

endif

if ball.left=<0 then'撞击左边

v2=v2*-1

endif

这是最基本的反d效果,可以根据你的需要做适当更改


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

原文地址: http://outofmemory.cn/yw/11940153.html

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

发表评论

登录后才能评论

评论列表(0条)

保存