完成这个小球的完全弹性碰撞游戏灵感来自于:

下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏:

游戏初始化状态:

最下面的游标和修改小球的移动速度

===================================================

源码部分:

===================================================

 #python tkinter
#python version 3.3.2 from tkinter import * '''
判断
两个小球
{
圆心:A(x1,y1) 半径:r X轴速度:Vax Y轴速度:Vay
圆心:B(x2,y2) 半径:R X轴速度:Vbx Y轴速度:Vby
}
碰撞的条件是:
1.两个小球的圆心距离不大于两小球半径之和(r+R),即:
{
(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
}
2.小球碰撞后,两小球的数度交换,即:
{
tempVax = Vax
tempVay = Vay
Vax = Vbx
Vay = Vby
Vbx = tempVax
Vby = tempVay
或:
Vax = Vax + Vbx
Vbx = Vax - Vbx
Vax = Vax - Vbx
Vay = Vay + Vby
Vby = Vay - Vby
Vay = Vay - Vby
} 游戏规则:
五小球在画布中移动,他们之间会产生碰撞,当然小球和上下左右都会产生碰撞
碰撞后,小球会改变方向返回
而最下面的游标则用于调节小球的移动速度,游标的范围是[-100, 100] 缺陷或BUG:
1.在修改游标数据从而改变小球移动速度的时候,小球移动的距离得不到及时的更新
导致小球可能会逃离画布
2.小球在运动的过程中,有时候也有可能逃离画布 总结:
完成这个游戏,花了一个星期的下班时间。在这个过程中不仅回去学习了高中的数学知识,
物理知识,很多东西都忘得差不多了,不过很快又学返回来了。
游戏其实很多就是数学问题。 游戏中还存在缺陷或BUG,希望志同道合者可以共同完善。
''' __author__ = {'author' : 'Hongten',
'Email' : 'hongtenzone@foxmail.com',
'Blog' : 'http://www.cnblogs.com/hongten/',
'Created' : '2013-09-28',
'Version' : '1.0'} class Pong(Frame):
def createWidgets(self):
## 画布
self.draw = Canvas(self, width="5i", height="5i", bg='white') ## 游标(控制小球移动速度,范围:[-100, 100])
self.speed = Scale(self, orient=HORIZONTAL, label="ball speed",
from_=-100, to=100) self.speed.pack(side=BOTTOM, fill=X) #小球碰撞墙壁的范围
self.scaling_right = 4.8
self.scaling_left = 0.2
#小球直径
self.ball_d = 0.4
#游标度数
self.scale_value = self.speed.get()
#放缩率
self.scaling = 100.0 #存放小球数组
self.balls = []
#存放小球x坐标数组
self.ball_x = []
#存放小球y坐标数组
self.ball_y = []
#存放小球x轴方向速度数组
self.ball_v_x = []
#存放小球y轴方向速度数组
self.ball_v_y = [] # 五个小球
self.ball = self.draw.create_oval("0.10i", "0.10i", "0.50i", "0.50i",
fill="red")
self.second_ball = self.draw.create_oval("0.70i", "0.70i", "1.10i", "1.10i",
fill='black')
self.three_ball = self.draw.create_oval("1.30i", "1.30i", "1.70i", "1.70i",
fill='brown')
self.four_ball = self.draw.create_oval("2.0i", "2.0i", "2.40i", "2.40i",
fill='green')
self.five_ball = self.draw.create_oval("3.0i", "3.0i", "3.40i", "3.40i",
fill='gray') #把五个小球放入数组
self.balls.append(self.ball)
self.balls.append(self.second_ball)
self.balls.append(self.three_ball)
self.balls.append(self.four_ball)
self.balls.append(self.five_ball) #第一个小球,即self.ball的圆心坐标(self.x, self.y),这里进行了放缩,目的是为了
#在小球移动的过程中更加流畅
self.x = 0.3
self.y = 0.3
#第一个小球的速度方向
self.velocity_x = -0.2
self.velocity_y = 0.5 self.second_ball_x = 0.9
self.second_ball_y = 0.9
self.second_ball_v_x = 0.4
self.second_ball_v_y = -0.5 self.three_ball_x = 1.5
self.three_ball_y = 1.5
self.three_ball_v_x = -0.3
self.three_ball_v_y = -0.5 self.four_ball_x = 2.2
self.four_ball_y = 2.2
self.four_ball_v_x = 0.1
self.four_ball_v_y = -0.5 self.five_ball_x = 3.2
self.five_ball_y = 3.2
self.five_ball_v_x = 0.3
self.five_ball_v_y = 0.5 #更新小球的坐标
self.update_ball_x_y()
self.draw.pack(side=LEFT) def update_ball_x_y(self, *args):
'''更新小球的坐标,即把各个小球的圆心坐标信息以及速度信息存放到数组中,
便于在后面循环遍历的时候使用。'''
#第一个小球信息
self.ball_x.append(self.x)
self.ball_y.append(self.y)
self.ball_v_x.append(self.velocity_x)
self.ball_v_y.append(self.velocity_y) self.ball_x.append(self.second_ball_x)
self.ball_y.append(self.second_ball_y)
self.ball_v_x.append(self.second_ball_v_x)
self.ball_v_y.append(self.second_ball_v_y) self.ball_x.append(self.three_ball_x)
self.ball_y.append(self.three_ball_y)
self.ball_v_x.append(self.three_ball_v_x)
self.ball_v_y.append(self.three_ball_v_y) self.ball_x.append(self.four_ball_x)
self.ball_y.append(self.four_ball_y)
self.ball_v_x.append(self.four_ball_v_x)
self.ball_v_y.append(self.four_ball_v_y) self.ball_x.append(self.five_ball_x)
self.ball_y.append(self.five_ball_y)
self.ball_v_x.append(self.five_ball_v_x)
self.ball_v_y.append(self.five_ball_v_y) def update_ball_velocity(self, index, *args):
'''更新各个小球速度信息,即小球碰撞到四周和另外的小球索要更新的速度信息'''
#游标值
self.scale_value = self.speed.get()
#碰撞墙壁
if (self.ball_x[index] > self.scaling_right) or (self.ball_x[index] < self.scaling_left):
self.ball_v_x[index] = -1.0 * self.ball_v_x[index]
if (self.ball_y[index] > self.scaling_right) or (self.ball_y[index] < self.scaling_left):
self.ball_v_y[index] = -1.0 * self.ball_v_y[index] '''
#TEST:
for n in range(len(self.balls)):
#print((self.ball_x[index] - self.ball_x[n])**2)
#print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2))
print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2))
'''
for n in range(len(self.balls)):
#小球碰撞条件,即:(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
if (round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2)):
#两小球速度交换
temp_vx = self.ball_v_x[index]
temp_vy = self.ball_v_y[index]
self.ball_v_x[index] = self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[n]
self.ball_v_x[n] = temp_vx
self.ball_v_y[n] = temp_vy
#print(self.ball_v_x, self.ball_v_y) '''
#WRONG:
for n in range(len(self.balls)):
if (((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2) <= self.ball_d**2):
#两小球速度交换
self.ball_v_x[index] = self.ball_v_x[index] + self.ball_v_x[n]
self.ball_v_x[n] = self.ball_v_x[0] - self.ball_v_x[n]
self.ball_v_x[index] = self.ball_v_x[index] - self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[index] + self.ball_v_y[n]
self.ball_v_y[n] = self.ball_v_y[index] - self.ball_v_y[n]
self.ball_v_y[index] = self.ball_v_y[index] - self.ball_v_y[n]
print(self.ball_v_x, self.ball_v_y)
''' def get_ball_deltax(self, index, *args):
'''获取小球X轴坐标移动距离并且更新小球的圆心X坐标,返回X轴所需移动距离'''
deltax = (self.ball_v_x[index] * self.scale_value / self.scaling)
self.ball_x[index] = self.ball_x[index] + deltax
return deltax def get_ball_deltay(self, index, *args):
'''获取小球Y轴坐标移动距离并且更新小球的圆心Y坐标,返回Y轴所需移动距离'''
deltay = (self.ball_v_y[index] * self.scale_value / self.scaling)
self.ball_y[index] = self.ball_y[index] + deltay
return deltay def moveBall(self, *args):
'''移动第一个小球,编号为:0,这是根据数组:self.balls确定的。'''
self.update_ball_velocity(0)
deltax = self.get_ball_deltax(0)
deltay = self.get_ball_deltay(0)
#小球移动
self.draw.move(self.ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.moveBall) def move_second_ball(self, *args):
self.update_ball_velocity(1)
deltax = self.get_ball_deltax(1)
deltay = self.get_ball_deltay(1)
self.draw.move(self.second_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_second_ball) def move_three_ball(self, *args):
self.update_ball_velocity(2)
deltax = self.get_ball_deltax(2)
deltay = self.get_ball_deltay(2)
self.draw.move(self.three_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_three_ball) def move_four_ball(self, *args):
self.update_ball_velocity(3)
deltax = self.get_ball_deltax(3)
deltay = self.get_ball_deltay(3)
self.draw.move(self.four_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_four_ball) def move_five_ball(self, *args):
self.update_ball_velocity(4)
deltax = self.get_ball_deltax(4)
deltay = self.get_ball_deltay(4)
self.draw.move(self.five_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_five_ball) def __init__(self, master=None):
'''初始化函数'''
Frame.__init__(self, master)
Pack.config(self)
self.createWidgets()
self.after(10, self.moveBall)
self.after(10, self.move_three_ball)
self.after(10, self.move_four_ball)
self.after(10, self.move_five_ball)
self.after(10, self.move_second_ball) game = Pong() game.mainloop()

源码下载:http://files.cnblogs.com/hongten/python_tkinter_pong.1.0.zip

===================================================

第二个版本 version.1.1:  Edit by Hongten 2013-09-28 17:40

===================================================

修改记录:
1.调整画布大小
2.调整了小球的半径,以及小球的速度初始值,小球初始圆心坐标
3.游标的范围修改为:[-200, 200]
这些修改主要是针对上面的缺陷而进行的。

优点:
1.小球移动的过程更直观
2.小球的移动速度变小,但是可以根据游标来修改小球移动速度
3.界面比之前更加友好

运行效果:

===================================================

 #python tkinter
#python version 3.3.2 from tkinter import * '''
判断
两个小球
{
圆心:A(x1,y1) 半径:r X轴速度:Vax Y轴速度:Vay
圆心:B(x2,y2) 半径:R X轴速度:Vbx Y轴速度:Vby
}
碰撞的条件是:
1.两个小球的圆心距离不大于两小球半径之和(r+R),即:
{
(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
}
2.小球碰撞后,两小球的数度交换,即:
{
tempVax = Vax
tempVay = Vay
Vax = Vbx
Vay = Vby
Vbx = tempVax
Vby = tempVay
或:
Vax = Vax + Vbx
Vbx = Vax - Vbx
Vax = Vax - Vbx
Vay = Vay + Vby
Vby = Vay - Vby
Vay = Vay - Vby
} 游戏规则:
五小球在画布中移动,他们之间会产生碰撞,当然小球和上下左右都会产生碰撞
碰撞后,小球会改变方向返回
而最下面的游标则用于调节小球的移动速度,游标的范围是[-100, 100] 缺陷或BUG:
1.在修改游标数据从而改变小球移动速度的时候,小球移动的距离得不到及时的更新
导致小球可能会逃离画布
2.小球在运动的过程中,有时候也有可能逃离画布 总结:
完成这个游戏,花了一个星期的下班时间。在这个过程中不仅回去学习了高中的数学知识,
物理知识,很多东西都忘得差不多了,不过很快又学返回来了。
游戏其实很多就是数学问题。 游戏中还存在缺陷或BUG,希望志同道合者可以共同完善。 修改记录:
1.调整画布大小
2.调整了小球的半径,以及小球的速度初始值,小球初始圆心坐标
3.游标的范围修改为:[-200, 200]
这些修改主要是针对上面的缺陷而进行的。 优点:
1.小球移动的过程更直观
2.小球的移动速度变小,但是可以根据游标来修改小球移动速度
3.界面比之前更加友好
''' __author__ = {'author' : 'Hongten',
'Email' : 'hongtenzone@foxmail.com',
'Blog' : 'http://www.cnblogs.com/hongten/',
'Created' : '2013-09-28',
'Version' : '1.1'} class Pong(Frame):
def createWidgets(self):
#放缩率
self.scaling = 100.0
#画布比例
self.canvas_width = 10
self.canvas_height = 5.6
## 画布
self.draw = Canvas(self, width=(self.canvas_width * self.scaling),
height=(self.canvas_height * self.scaling),
bg='white') ## 游标(控制小球移动速度,范围:[-100, 100])
self.speed = Scale(self, orient=HORIZONTAL, label="ball speed",
from_=-200, to=200) self.speed.pack(side=BOTTOM, fill=X) #小球直径
self.ball_d = 1.0
#小球碰撞墙壁的范围
self.scaling_left = round(self.ball_d / 2, 1)
self.scaling_right = self.canvas_width - self.scaling_left
self.scaling_bottom = self.canvas_height - self.scaling_left
self.scaling_top = self.scaling_left #游标度数
self.scale_value = self.speed.get() * 0.1 #存放小球数组
self.balls = []
#存放小球x坐标数组
self.ball_x = []
#存放小球y坐标数组
self.ball_y = []
#存放小球x轴方向速度数组
self.ball_v_x = []
#存放小球y轴方向速度数组
self.ball_v_y = [] # 五个小球
self.ball = self.draw.create_oval("0.60i", "0.60i", "1.60i", "1.60i",
fill="red")
self.second_ball = self.draw.create_oval("2.0i", "2.0i", "3.0i", "3.0i",
fill='black')
self.three_ball = self.draw.create_oval("4.0i", "4.0i", "5.0i", "5.0i",
fill='brown')
self.four_ball = self.draw.create_oval("6.0i", "2.0i", "7.0i", "3.0i",
fill='green')
self.five_ball = self.draw.create_oval("8.0i", "3.0i", "9.0i", "4.0i",
fill='gray') #把五个小球放入数组
self.balls.append(self.ball)
self.balls.append(self.second_ball)
self.balls.append(self.three_ball)
self.balls.append(self.four_ball)
self.balls.append(self.five_ball) #第一个小球,即self.ball的圆心坐标(self.x, self.y),这里进行了放缩,目的是为了
#在小球移动的过程中更加流畅
self.x = 1.1
self.y = 1.1
#第一个小球的速度方向
self.velocity_x = -0.2
self.velocity_y = 0.1 self.second_ball_x = 2.5
self.second_ball_y = 2.5
self.second_ball_v_x = 0.1
self.second_ball_v_y = -0.2 self.three_ball_x = 4.5
self.three_ball_y = 4.5
self.three_ball_v_x = -0.1
self.three_ball_v_y = -0.2 self.four_ball_x = 6.5
self.four_ball_y = 2.5
self.four_ball_v_x = 0.1
self.four_ball_v_y = -0.2 self.five_ball_x = 8.5
self.five_ball_y = 3.5
self.five_ball_v_x = 0.1
self.five_ball_v_y = 0.2 #更新小球的坐标
self.update_ball_x_y()
self.draw.pack(side=LEFT) def update_ball_x_y(self, *args):
'''更新小球的坐标,即把各个小球的圆心坐标信息以及速度信息存放到数组中,
便于在后面循环遍历的时候使用。'''
#第一个小球信息
self.ball_x.append(self.x)
self.ball_y.append(self.y)
self.ball_v_x.append(self.velocity_x)
self.ball_v_y.append(self.velocity_y) self.ball_x.append(self.second_ball_x)
self.ball_y.append(self.second_ball_y)
self.ball_v_x.append(self.second_ball_v_x)
self.ball_v_y.append(self.second_ball_v_y) self.ball_x.append(self.three_ball_x)
self.ball_y.append(self.three_ball_y)
self.ball_v_x.append(self.three_ball_v_x)
self.ball_v_y.append(self.three_ball_v_y) self.ball_x.append(self.four_ball_x)
self.ball_y.append(self.four_ball_y)
self.ball_v_x.append(self.four_ball_v_x)
self.ball_v_y.append(self.four_ball_v_y) self.ball_x.append(self.five_ball_x)
self.ball_y.append(self.five_ball_y)
self.ball_v_x.append(self.five_ball_v_x)
self.ball_v_y.append(self.five_ball_v_y) def update_ball_velocity(self, index, *args):
'''更新各个小球速度信息,即小球碰撞到四周和另外的小球索要更新的速度信息'''
#游标值
self.scale_value = self.speed.get() * 0.1
#碰撞墙壁
if (self.ball_x[index] > self.scaling_right) or (self.ball_x[index] < self.scaling_left):
self.ball_v_x[index] = -1.0 * self.ball_v_x[index]
if (self.ball_y[index] > self.scaling_bottom) or (self.ball_y[index] < self.scaling_top):
self.ball_v_y[index] = -1.0 * self.ball_v_y[index] '''
#TEST:
for n in range(len(self.balls)):
#print((self.ball_x[index] - self.ball_x[n])**2)
#print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2))
print(round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2))
'''
for n in range(len(self.balls)):
#小球碰撞条件,即:(x2 - x1)^2 + (y2 - y1)^2 <= (r + R)^2
if (round((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2, 2) <= round(self.ball_d**2, 2)):
#两小球速度交换
temp_vx = self.ball_v_x[index]
temp_vy = self.ball_v_y[index]
self.ball_v_x[index] = self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[n]
self.ball_v_x[n] = temp_vx
self.ball_v_y[n] = temp_vy
#print(self.ball_v_x, self.ball_v_y) '''
#WRONG:
for n in range(len(self.balls)):
if (((self.ball_x[index] - self.ball_x[n])**2 + (self.ball_y[index] - self.ball_y[n])**2) <= self.ball_d**2):
#两小球速度交换
self.ball_v_x[index] = self.ball_v_x[index] + self.ball_v_x[n]
self.ball_v_x[n] = self.ball_v_x[0] - self.ball_v_x[n]
self.ball_v_x[index] = self.ball_v_x[index] - self.ball_v_x[n]
self.ball_v_y[index] = self.ball_v_y[index] + self.ball_v_y[n]
self.ball_v_y[n] = self.ball_v_y[index] - self.ball_v_y[n]
self.ball_v_y[index] = self.ball_v_y[index] - self.ball_v_y[n]
print(self.ball_v_x, self.ball_v_y)
''' def get_ball_deltax(self, index, *args):
'''获取小球X轴坐标移动距离并且更新小球的圆心X坐标,返回X轴所需移动距离'''
deltax = (self.ball_v_x[index] * self.scale_value / self.scaling)
self.ball_x[index] = self.ball_x[index] + deltax
return deltax def get_ball_deltay(self, index, *args):
'''获取小球Y轴坐标移动距离并且更新小球的圆心Y坐标,返回Y轴所需移动距离'''
deltay = (self.ball_v_y[index] * self.scale_value / self.scaling)
self.ball_y[index] = self.ball_y[index] + deltay
return deltay def moveBall(self, *args):
'''移动第一个小球,编号为:0,这是根据数组:self.balls确定的。'''
self.update_ball_velocity(0)
deltax = self.get_ball_deltax(0)
deltay = self.get_ball_deltay(0)
#小球移动
self.draw.move(self.ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.moveBall) def move_second_ball(self, *args):
self.update_ball_velocity(1)
deltax = self.get_ball_deltax(1)
deltay = self.get_ball_deltay(1)
self.draw.move(self.second_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_second_ball) def move_three_ball(self, *args):
self.update_ball_velocity(2)
deltax = self.get_ball_deltax(2)
deltay = self.get_ball_deltay(2)
self.draw.move(self.three_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_three_ball) def move_four_ball(self, *args):
self.update_ball_velocity(3)
deltax = self.get_ball_deltax(3)
deltay = self.get_ball_deltay(3)
self.draw.move(self.four_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_four_ball) def move_five_ball(self, *args):
self.update_ball_velocity(4)
deltax = self.get_ball_deltax(4)
deltay = self.get_ball_deltay(4)
self.draw.move(self.five_ball, "%ri" % deltax, "%ri" % deltay)
self.after(10, self.move_five_ball) def __init__(self, master=None):
'''初始化函数'''
Frame.__init__(self, master)
Pack.config(self)
self.createWidgets()
self.after(10, self.moveBall)
self.after(10, self.move_three_ball)
self.after(10, self.move_four_ball)
self.after(10, self.move_five_ball)
self.after(10, self.move_second_ball) game = Pong() game.mainloop()

源码下载:http://files.cnblogs.com/hongten/python_tkinter_pong.1.1.zip

========================================================

More reading,and english is important.

I'm Hongten

大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
Hongten博客排名在100名以内。粉丝过千。
Hongten出品,必是精品。

E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

========================================================

python开发_tkinter_小球完全弹性碰撞游戏_源码下载的更多相关文章

  1. pygame系列_小球完全弹性碰撞游戏_源码下载

    之前做了一个基于python的tkinter的小球完全碰撞游戏: python开发_tkinter_小球完全弹性碰撞游戏_源码下载 今天利用业余时间,写了一个功能要强大一些的小球完全碰撞游戏: 游戏名 ...

  2. python开发_tkinter_小球完全弹性碰撞游戏

    python开发_tkinter_小球完全弹性碰撞游戏   完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改 ...

  3. pygame系列_箭刺Elephant游戏_源码下载

    这个游戏原名为:Chimp,我们可以到: http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 获取到源码和详细的源码讲解 下面是我对游戏 ...

  4. python开发_tkinter_获取文本框内容_给文本框添加键盘输入事件

    在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...

  5. openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  6. python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐

    我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...

  7. pygame系列_font游戏字体_源码下载

    在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中字体的一些介绍说明 首先我们得判断一下我们的pygame中有没有font这个模块 if not py ...

  8. 【原创】使用HTML5+canvas+JavaScript开发的原生中国象棋游戏及源码分享

    目前已经实现的功能: V1.0 : 实现棋子的布局,画布及游戏场景的初始化V2.0 : 实现棋子的颜色改变V3.0 :实现所有象棋的走棋规则V4.0 : 实现所有棋子的吃子功能 GItHub源码下载地 ...

  9. Web程序员开发App系列 - 开发我的第一个App,源码下载

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

随机推荐

  1. 诺贝斯特(厦门)电气有限公司http://www.thebest.cn.com/

    诺贝斯特(厦门)电气有限公司,公司位于厦门市湖里区塘边社168号.是一家专注于智能电网用户端智能配用电以及电气安全产品研发.生产和销售的高新技术企业:致力于为工矿企业.建筑楼宇以及基础设施等智能电网用 ...

  2. re-sign重签名

    准备: ① re-sign.jar重签名工具:(下载地址为:http://troido.de/downloads/category/1): ② 从D:\Android\sdk\build-tools\ ...

  3. 教你用DrawLayout 实现Android 侧滑菜单

    现在的APP越来越注重用户体验,百度视频客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示.类似的还有天天动听,人 ...

  4. Android性能测试工具之APT

    1.APT工具简介: APT是一个eclipse插件,可以实时监控Android手机上多个应用的CPU.内存数据曲线,并保存数据:另外还支持自动获取内存快照.PMAP文件分析等,方便开发人员自测或者测 ...

  5. window时间同步机制的简单介绍

    1 window自身现在采用w32tm程序来进行时间校正,window自身携带NTP程序,但默认下时关闭的,默认的NTP时客户端. 2 w32tm时用来代替早期的时钟同步程序net  time 3 w ...

  6. 一篇文章读懂开源web引擎Crosswalk-《转载》

    前言 Web技术的优势早已被广大应用开发者熟知,比如可与云服务轻松集成,基于响应式UI设计的精美布局,高度的开放性,跨平台能力, 高效的分发与部署等等.伴随着移动互联网的快速发展与HTML5技术的逐步 ...

  7. (三)Jsoup 使用选择器语法查找 DOM 元素

    第一节: Jsoup 使用选择器语法查找 DOM 元素 Jsoup使用选择器语法查找DOM元素 我们前面通过标签名,Id,Class样式等来搜索DOM,这些是不能满足实际开发需求的, 很多时候我们需要 ...

  8. mybatis中多条件判断---choose when的用法

    <select id="getFunctionByPage" resultMap="FunctionRlt"> SELECT K.FUNCTION_ ...

  9. 彻底卸载sql2008后重新安装

    彻底卸载sql2008方法 --打开控制面板,在控制面板中卸载所有带sql server的程序. --删除C:\Program Files\Microsoft SQL Server这整个文件夹, -- ...

  10. 一步一步学习IdentityServer4 (5) .NETCore2.0 Swagger

    首先添加nuget: Swashbuckle.AspNetCore services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new ...