汇智学堂-python小游戏(弹球游戏之六-类的使用中体会坐标位置)

3.6类的使用中体会坐标位置
现在我们应用类来将函数封装起来。当程序运行时,我们体会一下坐标位置。下面是我们要做的事情:
1、建两个类,一个类用来存球板相关的函数与变量,另一个类用来存球相关的函数与变量。
2、运行程序中体会球、球板坐标的位置。

实现代码如下:

class racket:
def init(self,canvas,color,ball):
self.canvas=canvas
self.x=0
self.id=canvas.create_rectangle(400, 600, 500, 620, fill =color)
self.canvas.bind_all(’’, self.turn_left)
self.canvas.bind_all(’’, self.turn_right)
self.ball=ball
def turn_left(self,evt):
self.x=-5
def turn_right(self, evt):
self.x = 5

def draw(self):
    #tkinter.messagebox.showinfo('提示',self.x)
    pos2=self.ball.canvas.coords(self.ball.id)            
    pos = self.canvas.coords(self.id)
    if pos[0] <= 0:            
        self.x = 0
    if pos[0]>=700:
        self.x=0
    self.canvas.move(self.id,self.x, 0)

    if pos2[3]>=pos[1]:
        tkinter.messagebox.showinfo('提示',"球的位置在球拍下侧")
    else:
        tkinter.messagebox.showinfo('提示',"球的位置在球拍上侧")

class ball:
def init(self,canvas,color):
self.canvas=canvas
self.a=random.randint(50,600)
self.b=random.randint(50,200)
‘’’
self.a=random.randint(600,700)
self.b=random.randint(600,700)’’’
self.id=canvas.create_oval(self.a, self.b, self.a+20, self.b+20, fill =color)
#self.racket=racket
def draw(self):
position=canvas.coords(self.id)
if position[3]<800:
self.canvas.move(1,0,5)
else:
canvas.create_text(400,420,text=“游戏结束”,fill=‘red’,font=(‘Times’,110))

ball=ball(canvas,‘red’)
racket=racket(canvas,‘green’,ball)
racket.draw()
ball.draw()

类的使用,属于面向对象编程的内容。建议基础知识弱些的读者,对照基础的书,加深理解。

将代码整合起来,整合后完整代码如下:

#-- coding:GBK --

from tkinter import *
import time
import random
import tkinter.messagebox #messagebox

closeornot=1
position=[1,1,1,1]

tk = Tk()
tk.title(“雷雷的弹球游戏”)
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=800, height=800, bd=0, highlightthickness=0)
canvas.pack()
tk.update()

class racket:
def init(self,canvas,color,ball):
self.canvas=canvas
self.x=0
self.id=canvas.create_rectangle(400, 600, 500, 620, fill =color)
self.canvas.bind_all(’’, self.turn_left)
self.canvas.bind_all(’’, self.turn_right)
self.ball=ball
def turn_left(self,evt):
self.x=-5
def turn_right(self, evt):
self.x = 5
def draw(self):
#tkinter.messagebox.showinfo(‘提示’,self.x)
pos2=self.ball.canvas.coords(self.ball.id)
pos = self.canvas.coords(self.id)
if pos[0] <= 0:
self.x = 0
if pos[0]>=700:
self.x=0
self.canvas.move(self.id,self.x, 0)

    if pos2[3]>=pos[1]:
        tkinter.messagebox.showinfo('提示',"123")
    else:
        tkinter.messagebox.showinfo('提示',"234")           

class ball:
def init(self,canvas,color):
self.canvas=canvas
self.a=random.randint(50,600)
self.b=random.randint(50,200)
‘’’
self.a=random.randint(600,700)
self.b=random.randint(600,700)’’’
self.id=canvas.create_oval(self.a, self.b, self.a+20, self.b+20, fill =color)
#self.racket=racket
def draw(self):
position=canvas.coords(self.id)
if position[3]<800:
self.canvas.move(1,0,5)
else:
canvas.create_text(400,420,text=“游戏结束”,fill=‘red’,font=(‘Times’,110))

ball=ball(canvas,‘red’)
racket=racket(canvas,‘green’,ball)
racket.draw()
ball.draw()

运行这段代码,当生成的球在球板的不同位置时,分别有提示。见图3-17、3-18
在这里插入图片描述
图3-17
在这里插入图片描述
图3-18

猜你喜欢

转载自blog.csdn.net/weixin_39593940/article/details/88361899