#include<conio.h>
#define HIGH 480
#define WIDTH 640
#define N 14//砖块的数目
int ball_x,ball_y
int ball_vx,ball_vy
int radius
int bar_x,bar_y
int bar_high,bar_width
int bar_left,bar_right,bar_top,bar_bottom
int isbrick[N]
int brick_high,brick_width
void startup()//数据初始化
{
initgraph(640,480)
ball_x=WIDTH/2
ball_y=HIGH/2
ball_vx=4
ball_vy=4
radius=20
bar_high=HIGH/14
bar_width=WIDTH/4
bar_x=WIDTH/2
bar_y=HIGH-bar_high/2
bar_left=bar_x-bar_width/2
bar_right=bar_x+bar_width/2
bar_top=bar_y-bar_high/2
bar_bottom=bar_y+bar_high/2
brick_width=WIDTH/N
brick_high=HIGH/N
int i
for(i=0i<Ni++)
isbrick[i]=1
BeginBatchDraw()
}
void clear()//清除画面
{
setcolor(BLACK)
setfillcolor(BLACK)
fillcircle(ball_x,ball_y,radius)
bar(bar_left,bar_top,bar_right,bar_bottom)
int i,brick_left,brick_right,brick_top,brick_bottom
for(i=0i<Ni++)
{
brick_left=i*brick_width
brick_right=brick_left+brick_width
brick_top=0
brick_bottom=brick_high
if(!isbrick[i])
fillrectangle(brick_left,brick_top,brick_right,brick_bottom)
}
}
void show()//显示画面
{
setcolor(RED)
setfillcolor(WHITE)
fillcircle(ball_x,ball_y,radius)
bar(bar_left,bar_top,bar_right,bar_bottom)
int i,brick_left,brick_right,brick_top,brick_bottom
for(i=0i<Ni++)
{
brick_left=i*brick_width
brick_right=brick_left+brick_width
brick_top=0
brick_bottom=brick_high
if(isbrick[i])
{setcolor(WHITE)
setfillcolor(BROWN)
fillrectangle(brick_left,brick_top,brick_right,brick_bottom)
}
}
FlushBatchDraw()
Sleep(10)
}
void output()//与用户输入无关的更新
{
if(((ball_y+radius>=bar_top)&&(ball_y+radius<bar_bottom-bar_high/3))
||((ball_y-radius<=bar_bottom)&&(ball_y-radius>bar_top-bar_high/3)))
if((ball_x>=bar_left)&&(ball_x<=bar_right))//挡板与小球碰撞
ball_vy=-ball_vy
ball_x=ball_x+ball_vx//小球更新坐标
ball_y=ball_y+ball_vy
if((ball_x<=radius)||(ball_x>=WIDTH-radius))//小球碰到边框返回
ball_vx=-ball_vx
if((ball_y<=radius)||(ball_y>=HIGH-radius))
ball_vy=-ball_vy
int i,brick_left,brick_right,brick_top,brick_bottom//判断小球是否和砖块碰撞
for(i=0i<Ni++)
{
if(isbrick[i])//砖块存在
{
brick_left=i*brick_width
brick_right=brick_left+brick_width
brick_bottom=brick_high
if((ball_y==brick_bottom+radius)&&(ball_x>=brick_left)&&(ball_x<=brick_right))
{
isbrick[i]=0
ball_vy=-ball_vy
}
}
}
}
void Input()//与用户输入有关的更新
{
{
MOUSEMSG m//定义鼠标信息
if(MouseHit())//检测当前是否有鼠标信息
{
m=GetMouseMsg()//获取一条鼠标信息
if(m.uMsg==WM_MOUSEMOVE)
{
//挡板的值得鼠标的位置
bar_x=m.x
bar_y=m.y
bar_left=bar_x-bar_width/2
bar_right=bar_x+bar_width/2
bar_top=bar_y-bar_high/2
bar_bottom=bar_y+bar_high/2
}
else if(m.uMsg==WM_LBUTTONDOWN)//按下鼠标左键,初始化小球的位置为挡板上面中心
{
ball_x=bar_x
ball_y=bar_top-radius-3
}
}
}
}
void gameover()//游戏结束
{
EndBatchDraw()
closegraph()
}
main()
{
startup()
while(1)
{
clear()
output()
Input()
show()
}
gameover()
return 0
}
Python程序开发之简单小程序实例
(11)小 游戏 -跳动的小球
一、项目功能
用户控制挡板来阻挡跳动的小球。
二、项目分析
根据项目功能自定义两个类,一个用于控制小球在窗体中的运动,一个用于接收用户按下左右键时,挡板在窗体中的运动。在控制小球的类中,我们还需要考虑当小球下降时,碰到挡板时的位置判断。
三、程序源代码
源码部分截图:
源码:
#!/usr/bin/python3.6
# -*- coding: GBK -*-
#导入相应模块
from tkinter import *
import random
import time
#自定义小球的类 Ball
class Ball:
# 初始化
def __init__(self,canvas,paddle,color):
#传递画布值
self.canvas=canvas
#传递挡板值
self.paddle=paddle
#画圆并且保存其ID
self.id=canvas.create_oval(10,10,25,25,fill=color)
self.canvas.move(self.id,245,100)
#小球的水平位置起始列表
start=[-3,-2,-1,1,2,3]
#随机化位置列表
random.shuffle(start)
self.x=start[0]
self.y=-2
self.canvas_heigh=self.canvas.winfo_height()#获取窗口高度并保存
self.canvas_width=self.canvas.winfo_width()
#根据参数值绘制小球
def draw(self):
self.canvas.move(self.id,self.x,self.y)
pos=self.canvas.coords(self.id)#返回相应ID代表的图形的当前坐标(左上角和右上角坐标)
#使得小球不会超出窗口
pad=self.canvas.coords(self.paddle.id)#获取小球挡板的坐标
if pos[1]=self.canvas_heigh or(pos[3]>=pad[1] and pos[2]>=pad[0] and pos[2]
在一些跨系统的性能测试项目中,往往由于客观因素的限制(测试硬件资源有限、多系统之间的协调等),我们无法搭建一个完整的测试环境来完成测试工作。此时,我们一般会搭建出被测系统,然后采用软件程序来模拟其他相关系统的功能。该软件程序一般被称为挡板。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)