示例#1
0
文件: kugel.py 项目: niwern/Billard
 def draw(self):
     """
     zeichent die Kugel
     :return:
     """
     draw.set_pen_color(self.c)
     draw.filled_circle(self.x, self.y, RADIUS)
     if self.m:
         draw.set_pen_color(color.WHITE)
         draw.filled_diamond(self.x, self.y, RADIUS / 2)
     draw.set_font_size()
     draw.set_font_family()
示例#2
0
文件: cue.py 项目: niwern/Billard
 def draw(self, k):
     draw.set_pen_radius(PEN_RADIUS)
     draw.set_pen_color(color.BROWN)
     draw.line(
         k.x + math.cos(self.alpha) * kugel.RADIUS * (2 + self.pow),
         k.y + math.sin(self.alpha) * kugel.RADIUS * (2 + self.pow),
         k.x + math.cos(self.alpha) * kugel.RADIUS * (LENGTH + self.pow),
         k.y + math.sin(self.alpha) * kugel.RADIUS * (LENGTH + self.pow))
     draw.set_pen_radius(0.001)
     draw.set_pen_color(color.RED)
     draw.line(k.x - math.cos(self.alpha) * kugel.RADIUS * (2),
               k.y - math.sin(self.alpha) * kugel.RADIUS * (2),
               k.x - math.cos(self.alpha) * kugel.RADIUS * (600),
               k.y - math.sin(self.alpha) * kugel.RADIUS * (600))
示例#3
0
    def draw_kugel(self):

        if self.number == 0:
            draw.set_pen_color(color.WHITE)
        if self.number == 1:
            draw.set_pen_color(color.YELLOW)
        if self.number == 2:
            draw.set_pen_color(color.BLUE)
        if self.number == 3:
            draw.set_pen_color(color.RED)
        if self.number == 4:
            draw.set_pen_color(color.VIOLET)
        if self.number == 5:
            draw.set_pen_color(color.ORANGE)
        if self.number == 6:
            draw.set_pen_color(color.DARK_GREEN)
        if self.number == 7:
            draw.set_pen_color(color.BROWN)
        if self.number == 8:
            draw.set_pen_color(color.BLACK)
        if self.number == 9:
            draw.set_pen_color(color.YELLOW)
        if self.number == 10:
            draw.set_pen_color(color.BLUE)
        if self.number == 11:
            draw.set_pen_color(color.RED)
        if self.number == 12:
            draw.set_pen_color(color.VIOLET)
        if self.number == 13:
            draw.set_pen_color(color.ORANGE)
        if self.number == 14:
            draw.set_pen_color(color.DARK_GREEN)
        if self.number == 15:
            draw.set_pen_color(color.BROWN)

        #draw.set_pen_color(self.color)
        draw.filled_circle(self.x, self.y, self.r)
        if self.number >= 8:
            draw.set_pen_color(color.WHITE)
            draw.filled_circle(self.x, self.y, self.r * 0.8)
        draw.set_pen_color(color.BLACK)
        if self.number == 0:
            draw.set_pen_color(color.WHITE)
        draw.text(self.x, self.y, str(self.number))
示例#4
0
文件: tisch.py 项目: niwern/Billard
def tisch():
    """
    zeichnet den Tisch und die Kugeln
    :return:
    """
    # Table --------------------------------------------------------------------------------------
    draw.set_pen_color(color.GREEN)
    draw.filled_rectangle(0, 0.25, 1, 0.5)
    draw.set_pen_radius(BORDER)

    # Bande --------------------------------------------------------------------------------------
    draw.set_pen_color(color.BROWN)
    draw.filled_rectangle(0, .25, 1, BORDER)
    draw.filled_rectangle(0, .75, 1, BORDER)
    draw.filled_rectangle(0, .25, BORDER, 0.5)
    draw.filled_rectangle(1 - BORDER, .25, BORDER, 0.5)

    # Loecher ------------------------------------------------------------------------------------
    draw.set_pen_color(color.BLACK)

    # mittlere  -------------------------
    draw.filled_rectangle(.5 - BORDER / 2, .25 + BORDER / 2, BORDER,
                          BORDER / 2)
    draw.filled_rectangle(.5 - BORDER / 2, .75, BORDER, BORDER / 2)

    # rechts unten  ---------------------
    x1 = [
        BORDER / 2, BORDER + LOCH_NORM, BORDER + LOCH_NORM, BORDER, BORDER / 2,
        BORDER / 2
    ]
    y1 = [
        .25 + BORDER / 2, .25 + BORDER / 2, .25 + BORDER,
        .25 + BORDER + LOCH_NORM, .25 + BORDER + LOCH_NORM, .25 + BORDER / 2
    ]

    # links unten -----------------------
    x2 = []
    y2 = y1
    for x in x1:
        d = .5 - x
        x2.append(x + 2 * d)

    # oben ------------------------------
    x3 = x1
    y3 = []
    x4 = x2
    y4 = []
    for y_1, y_2 in zip(y1, y2):
        d_1, d_2 = .5 + BORDER / 2 - y_1, .5 + BORDER / 2 - y_2
        y3.append(y_2 + 2 * d_2)
        y4.append(y_1 + 2 * d_1)

    # zeichnen --------------------------
    draw.filled_polygon(x1, y1)
    draw.filled_polygon(x2, y2)
    draw.filled_polygon(x3, y3)
    draw.filled_polygon(x4, y4)

    # Markierungen -------------------------------------------------------------------------------
    draw.set_pen_color(color.BLUE)
    for i in [0, 0.5]:
        for j in range(1, 4):
            draw.filled_diamond((.5 - BORDER) * j / 4 + BORDER,
                                .25 + BORDER / 2 + i, BORDER / 4)
        for j in range(1, 4):
            draw.filled_diamond((.5 - BORDER) * j / 4 + 0.5,
                                .25 + BORDER / 2 + i, BORDER / 4)
        for j in range(1, 4):
            draw.filled_diamond((BORDER / 2 + 2 * (i - (BORDER * i))),
                                .25 + BORDER + (0.5 - BORDER) * j / 4,
                                BORDER / 4)

    # Kugeln -------------------------------------------------------------------------------------
    for i in k:
        if not i.eingelocht:
            i.draw()
示例#5
0
def main():
    pygame.init()

    #screen = pygame.display.set_mode((1200, 1200))

    pygame.mouse.set_visible(1)

    pygame.key.set_repeat(1, 100)

    pygame.display.set_caption("Billard")

    draw.set_canvas_size(1000, 600)

    running = True

    c_bande = 0.02
    c_bande_2 = c_bande * 1000 / 600
    
    #setzt Löcher
    holes = [(0.2,0.25),(0.2,0.75),(0.5,0.25),(0.5,0.75),(0.8,0.25),(0.8,0.75)]
    
    #Initialisiert die Kugeln
    liste = [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15]
    random.shuffle(liste)

    x = 0
    j = 0
    liste_neu = []
    while x != 7:
        if liste[j] < 9:
            liste_neu.append(liste[j])
            j = j + 1
            x = x + 1
        else:
            j = j + 1

    x = 0
    j = 0
    while x != 7:
        if liste[j] >= 9:
            liste_neu.append(liste[j])
            j = j + 1
            x = x + 1
        else:
            j = j + 1

    for i in liste_neu:
        liste.remove(i)


    c = (((8 * ((((((3**(1/2)) / 2) * c_bande)**2) + ((0.5 * c_bande_2)**2))**(1/2)))**2) - ((4 * c_bande_2)**2))**(1/2)

    startwert_1 = 0.65
    startwert_2 = 0.5


    k_0 = bowl.kugel(0.35, 0.5, 0, 0, c_bande * 0.5, 0)
    k_1 = bowl.kugel(startwert_1, startwert_2, 0, 0, c_bande * 0.5, liste_neu[0])
    k_2 = bowl.kugel(startwert_1 + (c / 8), startwert_2 + (c_bande_2 / 2), 0, 0, c_bande * 0.5, liste_neu[1])
    k_3 = bowl.kugel(startwert_1 + (c / 8), startwert_2 - (c_bande_2 / 2), 0, 0, c_bande * 0.5, liste_neu[7])
    k_4 = bowl.kugel(startwert_1 + (c / 4), startwert_2 + c_bande_2, 0, 0, c_bande * 0.5, liste_neu[8])
    k_5 = bowl.kugel(startwert_1 + (c / 4), startwert_2, 0, 0, c_bande * 0.5, 8)
    k_6 = bowl.kugel(startwert_1 + (c / 4), startwert_2 - c_bande_2, 0, 0, c_bande * 0.5, liste_neu[2])
    k_7 = bowl.kugel(startwert_1 + (3*c / 8), startwert_2 + (1.5 * c_bande_2), 0, 0, c_bande * 0.5, liste_neu[3])
    k_8 = bowl.kugel(startwert_1 + (3*c / 8), startwert_2 + (0.5 * c_bande_2), 0, 0, c_bande * 0.5, liste_neu[9])
    k_9 = bowl.kugel(startwert_1 + (3*c / 8), startwert_2 - (0.5 * c_bande_2), 0, 0, c_bande * 0.5, liste_neu[4])
    k_10 = bowl.kugel(startwert_1 + (3*c / 8), startwert_2 - 1.5 * c_bande_2, 0, 0, c_bande * 0.5, liste_neu[10])
    k_11 = bowl.kugel(startwert_1 + (c / 2), startwert_2 + (2 * c_bande_2), 0, 0, c_bande * 0.5, liste_neu[11])
    k_12 = bowl.kugel(startwert_1 + (c / 2), startwert_2 + c_bande_2, 0, 0, c_bande * 0.5, liste_neu[12])
    k_13 = bowl.kugel(startwert_1 + (c / 2), startwert_2, 0, 0, c_bande * 0.5, liste_neu[5])
    k_14 = bowl.kugel(startwert_1 + (c / 2), startwert_2 - c_bande_2, 0, 0, c_bande * 0.5, liste_neu[13])
    k_15 = bowl.kugel(startwert_1 + (c / 2), startwert_2 - (2 * c_bande_2), 0, 0, c_bande * 0.5, liste_neu[6])

    hole_in = []
    k = [k_0, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_10, k_11, k_12, k_13, k_14, k_15]
    
    #Spieler konfigurieren
    player = []
    player.append(spieler.spieler(0))
    player.append(spieler.spieler(1))
    round_counter = 0
    no_ply = 0
    end = False
    while running:
 #       clock.tick(1000000)
        tisch.tisch()

        kugel_geschw_test = 0
        for i in k:
            if i.v_x or i.v_y != 0:
                kugel_geschw_test += 1

        if kugel_geschw_test == 0:
            queue(k_0,)
            k_0.move()

        #eingelochte Kugeln
        for ply in player:
            ply.draw_holeins()
                
                
        if (k_0 in hole_in) and (kugel_geschw_test == 0):
            check = True
            while(check):
                tisch.tisch()
                draw.set_pen_color(color.WHITE)
                draw._thick_line(0.35, 0.25, 0.35, 0.75, 0.001)
                for kugel in k:
                    kugel.draw_kugel()
                draw.show(1)
                if draw.mouse_pressed():
                    (press_x, press_y) = draw.mouse_position()
                    if 0.25 <= press_y <= 0.75:
                        ueberlagerungstest = 0
                        for i in k:
                            dx = i.x - 0.35
                            dy = (i.y - press_y) * 6 / 10
                            dist = ((dx ** 2) + (dy ** 2)) ** 0.5
                            if dist <= (2 * i.r):
                                ueberlagerungstest = ueberlagerungstest + 1
                        if ueberlagerungstest == 0:
                            hole_in.remove(k_0)
                            k_0 = bowl.kugel(0.35, press_y, 0, 0, c_bande * 0.5, 0)
                            k.append(k_0)
                            check = False
                            
        else:
            if draw.mouse_pressed() and k_0.v_x == k_0.v_y == 0:

                (press_x, press_y) = draw.mouse_position()
                k_0.v_x = (press_x - k_0.x) / 25
                k_0.v_y = (press_y - k_0.y) / 25
                round_counter += 1
          
        #Text Spieleranzeige
        if kugel_geschw_test == 0:
            if not (round_counter % 2 == no_ply):
                hole_in = []
            no_ply = round_counter % 2
            draw.set_pen_color(color.BLACK)
            draw.set_font_size(16)
            draw.set_pen_radius(5)
            draw.text(0.2,0.85,"Spieler "+str(no_ply+1)+" ist an der Reihe")
        
            # Bewegungen durchführen und zeichnen
        for kugel_1 in k:
            kugel_1.move()
            # Zeichnen
            kugel_1.draw_kugel()
            # Kollision
            k_tmp = k.copy()
            k_tmp.remove(kugel_1)
            for kugel_2 in k_tmp:
                if kollision_check(kugel_1, kugel_2):
                    kugel_1.kollision(kugel_2) 
            #Abfrage ob Kugel eingelocht
            for hole in holes :
                if strike_check(kugel_1,hole[0],hole[1],c_bande*0.75):
                    k.remove(kugel_1)
                    hole_in.append(kugel_1)
                    
                        
                    #weist die kugel_art den Spielern durch
                    if player[0].kugel_art == None and player[1].kugel_art == None :
                        if kugel_1.number == 8 :
                            end = True
                            ply = player.copy()
                            ply.remove(ply[no_ply])
                            winner = ply[0]
                        if not kugel_1.number == 0:
                            round_counter += 1    
                        player[no_ply].strike(kugel_1)
                        if no_ply == 0 and player[no_ply].kugel_art == 'voll' :
                            player[1].kugel_art = 'halb'
                        if i == 0 and player[no_ply].kugel_art == 'halb' :
                            player[1].kugel_art = 'voll'
                        if no_ply == 1 and player[no_ply].kugel_art == 'voll' :
                            player[0].kugel_art = 'halb'
                        if no_ply == 1 and player[no_ply].kugel_art == 'halb' :
                            player[0].kugel_art = 'voll'
                    #Schaut welche Kugel eingelocht wurde
                    #bestimmt das Resultat für die Spieler
                    else :
                        #Falls Schwarze Kugel versenkt wurde
                        if kugel_1.number == 8 and not (len(player[no_ply].hole_in) == 7):
                            end = True
                            ply = player.copy()
                            ply.remove(player[no_ply])
                            winner = ply[0]
                        elif kugel_1.number == 8 and len(player[no_ply].hole_in) == 7:
                            end = True
                            winner = player[no_ply]
                        #Falls eine Kugel versenkt wurde die nicht weiß oder Schwarz ist  
                        if not ((kugel_1.number > 8 and player[no_ply].kugel_art == 'halb') or (kugel_1.number < 8 and kugel_1.number > 0 and player[no_ply].kugel_art == 'voll'))                   :
                            if no_ply == 0 and not kugel_1.number == 0 :
                                player[1].strike(kugel_1)
                            if no_ply == 1 and not kugel_1.number == 0 :
                                player[0].strike(kugel_1)
                        else:
                            player[no_ply].strike(kugel_1)
                            round_counter += 1
        
        draw.show(1)
        draw.clear()
        #Bricht die while schleife ab, falls ein Spieler gewonnen hat
        if end :
            break
    #Gibt den gewinner an    
    draw.set_pen_color(color.BLACK) 
    draw.set_font_size(20)
    draw.text(0.5,0.5,"Spieler "+ str(winner.num + 1) + " hat gewonnen")
    draw.show()
示例#6
0
def queue(k_x):
    draw.set_pen_color(color.DARK_RED)
    (mouse_x, mouse_y) = draw.mouse_position()
    draw._thick_line(k_x.x, k_x.y, k_x.x - (((mouse_x - k_x.x) / ((((mouse_y - k_x.y)**2) + ((mouse_x - k_x.x)**2)) **
            (1/2))) * 0.15) , k_x.y - (((mouse_y - k_x.y) / ((((mouse_y - k_x.y)**2) + ((mouse_x - k_x.x)**2))**(1/2)))
                                       * 0.15 * (10/6)), 0.003)
示例#7
0
def tisch():

    draw.set_pen_radius(1)

    draw.set_pen_color(color.DARK_GREEN)

    draw.filled_rectangle(0.2 - c_bande, 0.25 - c_bande_2, 0.6 + (2 * c_bande),
                          0.5 + (2 * c_bande_2))

    draw.set_pen_color(color.GREEN)

    draw.filled_rectangle(0.2, 0.25, 0.6, 0.5)

    # Goldene Ecken

    draw.set_pen_color(color.GOLD)

    draw.filled_rectangle(0.2 - c_bande, 0.25 - c_bande_2, c_bande, c_bande_2)

    draw.filled_rectangle(0.2 - c_bande, 0.75, c_bande, c_bande_2)

    draw.filled_rectangle(0.5 - (c_bande / 2), 0.25 - c_bande_2, c_bande,
                          c_bande_2)

    draw.filled_rectangle(0.5 - (c_bande / 2), 0.75, c_bande, c_bande_2)

    draw.filled_rectangle(0.8, 0.25 - c_bande_2, c_bande, c_bande_2)

    draw.filled_rectangle(0.8, 0.75, c_bande, c_bande_2)

    # Löcher

    draw.set_pen_color(color.BLACK)

    draw.filled_circle(0.2, 0.25, c_bande * 0.75)

    draw.filled_circle(0.2, 0.75, c_bande * 0.75)

    draw.filled_circle(0.5, 0.25, c_bande * 0.75)

    draw.filled_circle(0.5, 0.75, c_bande * 0.75)

    draw.filled_circle(0.8, 0.25, c_bande * 0.75)

    draw.filled_circle(0.8, 0.75, c_bande * 0.75)

    # Rauten Markierung

    draw.set_pen_color(color.WHITE)

    draw.filled_raute(0.2 - (c_bande / 2), 0.375, c_bande / 2)

    draw.filled_raute(0.2 - (c_bande / 2), 0.5, c_bande / 2)

    draw.filled_raute(0.2 - (c_bande / 2), 0.625, c_bande / 2)

    draw.filled_raute(0.8 + (c_bande / 2), 0.375, c_bande / 2)

    draw.filled_raute(0.8 + (c_bande / 2), 0.5, c_bande / 2)

    draw.filled_raute(0.8 + (c_bande / 2), 0.625, c_bande / 2)

    draw.filled_raute(0.275, 0.25 - (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.35, 0.25 - (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.425, 0.25 - (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.575, 0.25 - (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.65, 0.25 - (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.725, 0.25 - (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.275, 0.75 + (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.35, 0.75 + (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.425, 0.75 + (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.575, 0.75 + (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.65, 0.75 + (c_bande_2 / 2), c_bande / 2)

    draw.filled_raute(0.725, 0.75 + (c_bande_2 / 2), c_bande / 2)

    #Spieler angaben
    draw.set_pen_color(color.BLACK)
    draw.text(0.1, 0.75, "Spieler 1 eingelocht :")
    draw.text(0.9, 0.75, "Spieler 2 eingelocht :")