球多次与同一个球相撞

问题描述

目标是使用可以上下左右移动的球X将其他球(用字母表示)从地图上敲下来。 1 代表一堵墙,0 代表您可以移动到的开放空间。当它撞到墙上时,它应该以其剩余的动量向另一个方向移动。当球 x 与另一个球碰撞时,它应该将其动量传递给下一个球。到目前为止,我的程序在第一次碰撞时起作用,但当我再次尝试击球时却不起作用。我主要关注向右移动的碰撞,当它起作用时,我可以添加它向左、向上和向下移动。谁能告诉我哪里出了问题以及如何解决

地图看起来像这样:

1 1 1 0 C D 0 1

0 A 0 0 0 1 0 1

0 B 1 0 0 0 0 1

0 X 1 0 0 0 0 0

1 1 1 1 1 1 1 1

class ball :
def __init__(self,name,x,y,map) :
    self.name = name
    self.x = x
    self.y = y
    self.map = map

def getXCordinates(self) :
    return self.x

def getYCordinates(self) :
    return self.y

def getMap(self) :
    return self.map

def getName(self) :
    return self.name

def getPoints(self) :
    return self.points

def moveRight(self,steps) :
    if steps == 0 :
        self.map[self.y][self.x] = self.name
        print(self.map)
    self.map[self.y][self.x] = '0'
    maxrange = self.x + steps + 1
    k = 1
    for i in range(self.x + 1,maxrange) :
        try :
            if self.map[self.y][i] == '0' :
                if i == maxrange - 1 :
                    self.x = self.x + steps
                    try :
                        self.map[self.y][self.x] = self.name
                        print(self.map)
                    except :
                        print("GAME OVER! Your ball fell out of the map")
            elif self.map[self.y][i] == '1' : 
                self.x = i - 1
                self.moveLeft(steps - k)
                break
            else :
                print("ball",self.name,"collided with ball",self.map[self.y][i])
                self.map[self.y][self.x + (k - 1)] = self.name
                self.x = self.x + k
                ballExtra = ball(self.map[self.y][i],self.x,self.y,self.map) 
                ballExtra.moveRight(steps - k)
                break
            k += 1  
        except :
            print("GAME OVER! Your ball fell out of the map")
            break

def moveLeft(self,steps) :
    self.map[self.y][self.x] = '0'
    minRange = self.x - steps - 1
    k = 0
    for i in range(self.x,minRange,-1) :
        try :
            if self.map[self.y][i] == '0' :
                if i == minRange + 1 :
                    self.x = self.x - steps
                    try :
                        self.map[self.y][self.x] = self.name
                        print(self.map)
                    except :
                        print("GAME OVER! Your ball fell out of the map")
            elif self.map[self.y][i] == '1' : 
                self.x = i + 1
                self.moveRight(steps - k)
                break
            else :
                print("ball",self.map[self.y][i])
                self.x = self.x - (k + 1)
                self.map[self.y][self.x] = self.name
                ballExtra = ball(self.map[self.y][i],(self.x - k),self.map) 
                ballExtra.moveLeft(steps - k)
                break
            k += 1
        except :
            print("GAME OVER! Your ball fell out of the map")
            break

def moveUp(self,steps) :
    self.map[self.y][self.x] = '0'
    minRange = self.y - steps - 1
    k = 0
    for i in range(self.y,-1) :
        try :
            if self.map[i][self.x] == '0' :
                if i == minRange + 1 :
                    self.y = self.y - steps
                    try :
                        self.map[self.y][self.x] = self.name
                        print(self.map)
                    except :
                        print("GAME OVER! Your ball fell out of the map")
            elif self.map[i][self.x] == '1' : 
                self.y = i + 1
                self.moveDown(steps - k)
                break
            else :
                ballExtra = ball(self.map[i][self.x],self.map)
                ballExtra.moveUp(steps - k)
            k += 1
        except :
            print("GAME OVER! Your ball fell out of the map")
            break

def moveDown(self,steps) :
    if steps == 0 :
        self.map[self.y][self.x] = self.name
        print(self.map)
    self.map[self.y][self.x] = '0'
    maxrange = self.y + steps + 1
    k = 1
    for i in range(self.y + 1,maxrange) :
        try :
            if self.map[i][self.x] == '0' :
                if i == maxrange - 1 :
                    self.y = self.y + steps
                    try :
                        self.map[self.y][self.x] = self.name
                        print(self.map)
                    except :
                        print("GAME OVER! Your ball fell out of the map")
            elif self.map[i][self.x] == '1' : 
                self.y = i - 1
                self.moveUp(steps - k)
                break
            else :
                ballExtra = ball(self.map[i][self.x],self.map)
                ballExtra.moveDown(steps - k)
            k += 1  
        except :
            print("GAME OVER! Your ball fell out of the map")
            break

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)