反弹球功能模块图怎么做,像下面图片这种

第一步,显示静止的小球。

// 在坐标(x,y)处输出一个小球

#include <stdio.h>

void main()

{

   int i,j;

   int x = 5;

   int y = 10;    

   // 输出小球上面的空行

   for(i=0;i<x;i++)

       printf("\n");

   // 输出小球左边的空格

   for (j=0;j<y;j++)

       printf(" ");

   printf("o");  // 输出小球o

   printf("\n");     

}第二步,通过改变小球坐标的变量,让小球下落

#include <stdio.h>

#include <stdlib.h>

void main()

{

   int i,j;

   int x = 1;

   int y = 10;

   for (x=1;x<10;x++)

   {

       system("cls");   // 清屏函数

       // 输出小球上面的空行

       for(i=0;i<x;i++)

           printf("\n");

       // 输出小球左边的空格

       for (j=0;j<y;j++)

           printf(" ");

       printf("o");  // 输出小球o

       printf("\n"); 

   }    

} 这里利用了一个清屏函数system("cls");,只需要加上头文件#include <stdlib.h>即可。

第三步,实现小球的上下弹跳,在上面一步代码的基础上,增加记录速度的变量,小球的新位置=旧位置+速度。判断小球到达上下边界时,速度改变方向,即改变正负号。

#include <stdio.h>

#include <stdlib.h>

 

void main()

{

   int i,j;

   int x = 5;

   int y = 10;

   

   int hight = 20;

   int velocity = 1;

   

   while (1)

   {

       x=x+velocity;

       system("cls");   // 清屏函数

       

       // 输出小球前的空行

       for(i=0;i<x;i++)

           printf("\n");

       for (j=0;j<y;j++)

           printf(" ");

       printf("o");  // 输出小球o

       printf("\n"); 

       

       if (x==hight)

           velocity = -velocity;

       if (x==0)

       {

           velocity = -velocity;

       }        

   }    

实现了游戏延迟、统计分数的功能
from Tkinter import *
import random
import time


class Ball:
    def __init__(self,canvas,paddle,score,color):#前后各两个短线
        self.canvas=canvas
        self.paddle=paddle
        self.score=score
        self.id=canvas.create_oval(10,10,25,25,fill=color)
        self.canvas.move(self.id,245,100)#移动到画布中心
        starts=[-3,-2,-1,1,2,3]
        random.shuffle(starts)#混排
        self.x=starts[0]
        self.y=-3
        self.canvas_height=self.canvas.winfo_height()#获取画布 当前高度
        self.canvas_width=self.canvas.winfo_width()
        self.hit_bottom=False

 


    def hit_paddle(self,pos):#包含小球的当前坐标
        paddle_pos=self.canvas.coords(self.paddle.id)#得到拍子的坐标,并放入到变量paddle_pos中
        if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]:#x果小球的右侧大于球拍的左侧。。。其中pos[2]包含了小球右侧的x坐标,pos[0]包含了左侧的x坐标;paddle_pos[0]球拍左侧的的x坐标
            if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]:#pos[1]顶部  pos[3]底部
                self.x+=self.paddle.x
                self.score.hit()
                return True
        return False


    def draw(self):
            self.canvas.move(self.id,self.x,self.y)#id是椭圆形的id,还有0指不要水平移动,-1指在屏幕上向上移动1个像素
            pos=self.canvas.coords(self.id)#通过ID来返回画布上任何画好的东西的当前的x和y坐标,那个圆形的ID
            if pos[1]<=0:#小球顶部
                self.y=3
            if pos[3]>=self.canvas_height:#小球底部
                self.hit_bottom=True
            if self.hit_paddle(pos)==True:

 
                self.y=-3
            if pos[0]<=0:
                self.x=3
            if pos[2]>=self.canvas_width:
                self.x=-3
class Paddle:
    def __init__(self,canvas,color):
        self.canvas=canvas
        self.id=canvas.create_rectangle(0,0,100,10,fill=color)
        self.canvas.move(self.id,200,300)
        self.x=0
        self.canvas_width=self.canvas.winfo_width()
        self.started=False
        self.canvas.bind_all('<KeyPress-Left>',self.turn_left)#绑定到键盘方向键
        self.canvas.bind_all('<KeyPress-Right>',self.turn_right)
        self.canvas.bind_all('<Button-1>',self.start_game)
        
    def draw(self):
        self.canvas.move(self.id,self.x,0)
        pos=self.canvas.coords(self.id)

 
        if pos[0]<=0:
            self.x=0
        elif pos[2]>=self.canvas_width:
            self.x=0
        
    def turn_left(self,evt):
        self.x=-2


    def turn_right(self,evt):
        self.x=2


    def start_game(self,evt):
        self.started=True


class Score:
    def __init__(self,canvas,color):
        self.score=0

 
        self.canvas=canvas
        self.id=canvas.create_text(450,10,text=self.score,fill=color)
    def hit(self):
        self.score+=1
        self.canvas.itemconfig(self.id,text=self.score)
tk=Tk()
tk.title("Game")
tk.resizable(0,0)#窗口大小不可调整,0,0表示窗口大小在水平方向和垂直方向上都不能改变
tk.wm_attributes("-topmost",1)#把包含我们画布的窗口放到所有其他窗口之前
canvas=Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()#让画布按前一行给出的宽度和高度的参数来调整其自身大小
my_image=PhotoImage(file='c:\\135.gif')
canvas.create_image(130,0,anchor=NW,image=my_image)
tk.update()#为游戏中的动画做好初始化
#canvas.create_oval(10,10,25,25,fill='blue')




score=Score(canvas,'blue')

 
paddle=Paddle(canvas,'green')
ball=Ball(canvas,paddle,score,'pink')
game_over_text=canvas.create_text(250,200,text='GAME OVER',font=('Times',30),state='hidden')


while 1:
    if ball.hit_bottom==False and paddle.started==True:
        ball.draw()
        paddle.draw()
    if ball.hit_bottom==True:
        time.sleep(1)
        canvas.itemconfig(game_over_text,state='normal')
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632