python实用的游戏小代码
python3实现小球转动抽奖小游戏最近老师在讲 tkinter,所以我做了一个抽奖小游戏。
一、效果图
先上效果图。红色的小球会围绕蓝色小球做环形运动。我设置的四个角是奖品,其余的都是再接再厉。
二、方法
基于tkinter中的button,text,pil ,time.canvas
drawpath():用于画蓝色的小球
ball类 初始化画布、运动小球大小、运动的起点。
ball类-》draw() 控制小球的运动。这里用到一个方法叫canvas.coords。这个方法可以获取运动小球当前在画布上的坐标。并返回一个数组。比如 pos=self.canvas.coords 。左边:pos[0],右边pos[2],上边:pos[1],下边:pos[3].用if和pos 可以控制小球的上下左右运动。
|
self .canvas.move( self . id , self .x, self .y) #获取某个对象在画布的坐标,返回一个数组(两个坐标,左上角的坐标和右下角的两个坐标) pos = self .canvas.coords( self . id ) getnowpoint(pos[ 0 ],pos[ 1 ],pos[ 2 ],pos[ 3 ]) #打印获取的坐标 #如果最上面的纵轴坐标在顶上,则往下移动一个像素 if pos[ 1 ] < = 30 and self .y = = - 80 : self .x = 80 self .y = 0 print ( "pos1" + str ( self .x) + ":pos1:" + str ( self .y)) #如果最下面的纵轴坐标在底上,则向左移动 elif pos[ 3 ] > 300 and self .x = = 0 and self .y = = 80 : self .x = - 80 self .y = 0 print ( "pos3" + str ( self .x) + ":pos3:" + str ( self .y)) #宽度控制# #如果在左边框了,那么向右边移动3像素 elif pos[ 0 ] < 30 and self .x = = - 80 : self .x = 0 self .y = - 80 print ( "pos0" + str ( self .x) + ":pos0:" + str ( self .y)) #如果到右边框了,左移动3像素 elif pos[ 2 ] > 300 and self .y = = 0 : self .x = 0 self .y = 80 print ( "pos2:" + str ( self .x) + "pos2:" + str ( self .y)) |
getnowpoint()当前红色运动小球的位置。
放图片的函数:
|
img44 = image. open ( "px.jpg" alt="python实用的游戏小代码(python3实现小球转动抽奖小游戏)" border="0" /> img_file44 = imagetk.photoimage(img44) canvas.create_image( 200 , 200 , image = img_file44)(参数 1 , 2 图片的位置x,y,参数 3 是图片) |
三、遇到的问题
老师教的显示canvas上的内容要用mainloop(),所以一开始不知道怎么让小球动起来,最后查阅了很多资料发现。其实不用mainloop也行。可以使用tk.update() 刷新tk上的内容。所以这里我们要用一个while让小球每动一次窗体就刷新一次。time.sleep()控制小球运动速度。
四、代码
|
from tkinter import * import random import time from pil import image, imagetk # #创建一个类,这个类含有两个参数,一个是画布,一个是球的颜色 # count = 0 #a = eval(input('time:')) #b = a global isstop global num isstop = 0 def stopplay(): global isstop isstop = 1 def startplay(): global isstop isstop = 0 class ball: def __init__( self ,canvas,color): self .canvas = canvas self . id = canvas.create_oval( 0 , 0 , 35 , 35 ,fill = color) self .canvas.move( self . id , 10 , 5 ) self .x = 80 self .y = 0 def draw( self ): if isstop = = 0 : self .canvas.move( self . id , self .x, self .y) #获取某个对象在画布的坐标,返回一个数组(两个坐标,左上角的坐标和右下角的两个坐标) pos = self .canvas.coords( self . id ) getnowpoint(pos[ 0 ],pos[ 1 ],pos[ 2 ],pos[ 3 ]) #打印获取的坐标 #如果最上面的纵轴坐标在顶上,则往下移动一个像素 if pos[ 1 ] < = 30 and self .y = = - 80 : self .x = 80 self .y = 0 print ( "pos1" + str ( self .x) + ":pos1:" + str ( self .y)) #如果最下面的纵轴坐标在底上,则向左移动 elif pos[ 3 ] > 300 and self .x = = 0 and self .y = = 80 : self .x = - 80 self .y = 0 print ( "pos3" + str ( self .x) + ":pos3:" + str ( self .y)) #宽度控制# #如果在左边框了,那么向右边移动3像素 elif pos[ 0 ] < 30 and self .x = = - 80 : self .x = 0 self .y = - 80 print ( "pos0" + str ( self .x) + ":pos0:" + str ( self .y)) #如果到右边框了,左移动3像素 elif pos[ 2 ] > 300 and self .y = = 0 : self .x = 0 self .y = 80 print ( "pos2:" + str ( self .x) + "pos2:" + str ( self .y)) if isstop = = 1 : print ( "停止" ) self .canvas.move( self . id , self .x, self .y) # 获取某个对象在画布的坐标,返回一个数组(两个坐标,左上角的坐标和右下角的两个坐标) pos = self .canvas.coords( self . id ) print (pos) def getnowpoint(x1,y1,x2,y2): global num print ( "现在在" ) print (x1,y1,x2,y2) row = (x1 - 10 ) / 80 line = (y1 - 5 ) / 80 num = str ( int (row)) + str ( int (line)) print ( "点" + str ( int (row)) + str ( int (line))) #return num def drawpath(): for i in range ( 5 ): for j in range ( 5 ): if i = = 0 or i = = 4 : point = ( 20 + 80 * j, 20 + 80 * i, 35 + 80 * j, 35 + 80 * i) oil = canvas.create_oval(point, fill = 'lightblue' ) elif j = = 0 or j = = 4 : # print("$") point = ( 20 + 80 * j, 20 + 80 * i, 35 + 80 * j , 35 + 80 * i) oil = canvas.create_oval(point, fill = 'lightblue' ) #创建画布 tk = tk() tk.title( "game_ball" ) tk.resizable( 0 , 0 ) tk.wm_attributes( "-topmost" , 1 ) #bd=0,highlightthickness=0 画布之外没有边框 canvas = canvas(tk,width = 500 ,height = 400 ,bd = 0 ,highlightthickness = 0 ) canvas.pack() tk.update() point = ( 30 , 30 , 45 , 45 ) #创建对象 ball = ball(canvas, 'red' ) drawpath() #一直保持循环 btn_start = button(tk,text = 'start' ,width = '20' ,command = startplay) btn_start.pack() btn_end = button(tk,text = 'end' ,width = '20' ,command = stopplay) btn_end.pack() global txt txt = "" text1 = text(tk,width = 30 ,height = 4 ) while 1 : if isstop = = 0 : txt = " " text1.insert(insert, txt) text1.delete( 0.0 ,insert) imgtt = image. open ( "tt.jpg" alt="python实用的游戏小代码(python3实现小球转动抽奖小游戏)" border="0" /> img_filett = imagetk.photoimage(imgtt) canvas.create_image( 200 , 200 , image = img_filett) whi
|