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

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

游戏初始化状态:

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

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

源码部分:

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

 #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. Spiral Matrix I & II

    Spiral Matrix I Given an integer n, generate a square matrix filled with elements from 1 to n^2 in s ...

  2. redis学习笔记之redis简介

    redis简介 Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过设置各种键值数据类型来适应不同场景下的缓存与存储需求.同事redis的诸多高层级功能使其可以胜任消息队列,任务队列等不 ...

  3. Android图片异步加载

    原:http://www.cnblogs.com/angeldevil/archive/2012/09/16/2687174.html 相关:https://github.com/nostra13/A ...

  4. 一、springcloud服务注册、发现、调用(consul/eureka)

    1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  5. nodejs 接收上传的图片

    1.nodejs接收上传的图片主要是使用formidable模块,服务器是使用的express搭建. 引入formidable var formidable = require('./node_mod ...

  6. 【前端vue开发】vue开发watch检测的使用

    <span style="color:#006600;"><div id="app"> <input type="tex ...

  7. 安装node版本管理工具之NVM

    nvm是个啥?nvm是一个可以让你在同一台机器上安装和切换不同版本node的工具. 你可能会问,为什么会有这个工具?有时候在开发的时候,对node版本有强制要求,有的要求用最新版本,有的要求用稳定版本 ...

  8. 3.Springboot之修改启动时的默认图案Banner

    一.SpringBoot的默认启动图案 在SpringBoot启动的时候,默认的会展示出一个spring的logo,这个图案我们用户是可以自定义的 二.自定义启动图案 方法一: Application ...

  9. JQ实现情人节表白程序

    JQ实现情人节表白页面 效果图: 表白利页,你值得拥有哦! 代码如下,复制即可使用: <!doctype html> <html> <head> <meta ...

  10. asp.net 微信公众号源码

    需要源码,请加QQ:858-048-581 功能菜单 该源码功能十分的全面,具体介绍如下:1.菜单回复:微信自定义回复.关注时回复.默认回复.文本回复.图文回复.语音回复. 请求回复记录.LBS位置回 ...