コード例 #1
0
def main():
    init_sim()

    physics = PhysicsSystem(env_size)
    rendering = RenderingSystem(rad)

    while True:
        draw_frame(rendering, physics)
        draw.show(0.0)
        draw.clear()
コード例 #2
0
ファイル: tisch.py プロジェクト: niwern/Billard
def kugel_zurueck_setzen():
    """
    setzt die weisse Kugel auf die Ursprungsposition zurueck
    :return:
    """
    k[0].eingelocht = False
    k[0].x = X_STR_2
    k[0].y = Y_MID
    dir = 1
    while True:
        if k[0].y >= 0.75 - kugel.RADIUS or k[
                0].y <= .25 + BORDER + kugel.RADIUS:
            dir *= -1
        if draw.mouse_pressed():
            if not k[0].overlap(k[1:]):
                break
        k[0].y += dir * .001
        tisch()
        draw.show(1)
        draw.clear()
コード例 #3
0
def example_get_adjusted_map():
    net = Network.load_native('data/janos-us.txt')
    points = [(n.long, n.lati) for n in net.nodes]
    projection = MercatorProjection.from_points(points,
                                                map_size=(1024, 512),
                                                padding=50)

    status = mapbox.get_map_as_file(
        'data/map-us.png',
        replace=True,
        api_token=os.environ['MAPBOX_API_KEY'],
        projection=projection,
        style='countries_basic',
    )
    print('Map ' + ('' if status else 'not ') + 'dowloaded')

    net.add_pixel_coordinates(projection)

    draw.prepare('data/map-us.png')
    for u, v in net.edges:
        sx, sy = net.edge_middle_point(u, v, pixel_value=True)
        distance = haversine(u.long, u.lati, v.long, v.lati)
        draw.line(u.x, u.y, v.x, v.y, marker='o', color='gray')
        draw.text(sx,
                  sy,
                  f'{distance:.0f}km',
                  fontsize=7,
                  color='navy',
                  weight='bold',
                  horizontalalignment='center')

    for node in net.nodes:
        draw.text(node.x,
                  node.y,
                  node.name,
                  fontsize=8,
                  color='black',
                  weight='bold',
                  horizontalalignment='center')
    draw.show()
コード例 #4
0
def example_sndlib_draw_geomanip():
    projection = MercatorProjection(map_size=(1024, 512),
                                    center=(19.6153711, 52.0892499),
                                    zoom=5)

    status = mapbox.get_map_as_file(
        'data/map-pl.png',
        replace=True,
        api_token=os.environ['MAPBOX_API_KEY'],
        projection=projection,
        style='countries_basic',
    )
    print('Map ' + ('' if status else 'not ') + 'dowloaded')

    net = Network.load_native('data/polska.txt')
    net.add_pixel_coordinates(projection)

    draw.prepare('data/map-pl.png')
    for u, v in net.edges:
        sx, sy = net.edge_middle_point(u, v, pixel_value=True)
        distance = haversine(u.long, u.lati, v.long, v.lati)
        draw.line(u.x, u.y, v.x, v.y, marker='o', color='gray')
        draw.text(sx,
                  sy,
                  f'{distance:.0f}km',
                  fontsize=7,
                  color='navy',
                  weight='bold',
                  horizontalalignment='center')

    for node in net.nodes:
        draw.text(node.x,
                  node.y,
                  node.name,
                  fontsize=8,
                  color='black',
                  weight='bold',
                  horizontalalignment='center')
    draw.show()
コード例 #5
0
def main():
    filename = sys.argv[1]
    dt = float(sys.argv[2])

    universe = Universe(filename)
    physics = PhysicsSystem()
    rendering = RenderingSystem()

    while True:
        universe._bodies = physics.increaseTime(universe._bodies, dt)
        draw.clear()
        rendering.render(universe._bodies)
        draw.show(10.0)

    # sec = 60
    # secondsWaited = 0.0
    # while secondsWaited < sec:
    #     universe.increaseTime(dt)
    #     universe.draw()
    #     draw.show(0.0)
    #     secondsWaited += dt

    draw.save("/Users/daviddavitadze/Downloads/universe.jpg")
コード例 #6
0
ファイル: tisch.py プロジェクト: niwern/Billard
def main():
    """
    Hauptprogram
    - erstellt Fenster und Queue
    - laeuft Spielschleife
    :return:
    """

    draw.set_canvas_size(1000, 1000)
    my_cue = cue.cue()
    kugeln_legen()
    #p[0].ist_am_zug = True
    #current_player = p[0]

    # Spielschleife
    while True:

        tisch()  # Tisch & Kugeln werden gezeichnet
        draw.show(1)

        # Schlagen -------------------------------------------------------------------------------
        if kugeln_stehen_still(k):
            for i in p:
                print(i.points)
                print("")
            if p[0].ist_am_zug:
                p[0].ist_am_zug = False
                p[1].ist_am_zug = True
            else:
                p[1].ist_am_zug = False
                p[0].ist_am_zug = True

            if p[0].ist_am_zug:
                current_player = p[0]
            else:
                current_player = p[1]

            print("{} ist am Zug.".format(current_player.name))

            # weisse Kugel setzen
            if k[0].eingelocht:
                k[0].eingelocht = False
                k[0].x = X_STR_2
                k[0].y = Y_MID
                dir = 1
                while True:
                    draw.clear()
                    tisch()
                    draw.show(1)
                    if draw.mouse_pressed():
                        if not k[0].overlap(k[1:]):
                            break
                    k[0].y += dir * 0.001
                    if .25 + BORDER + kugel.RADIUS >= k[0].y or k[
                            0].y >= 0.75 - kugel.RADIUS:
                        dir *= -1

            while True:
                try:
                    winkel = int(
                        input(
                            "In welchen Winkel (degrees) wollen sie schlagen"))
                except:
                    continue
                my_cue.alpha = math.radians(winkel)
                draw.clear()
                tisch()
                my_cue.draw(k[0])
                draw.show(1)
                try:
                    if str(
                            input(
                                "Wollen Sie in wirklich in {} schlagen".format(
                                    winkel))).lower() == "y":
                        break
                except:
                    pass
            while True:
                try:
                    cue_power = float(
                        input("Wie hart wollen sie schlagen [0,2]?"))
                except:
                    continue
                if 0 > cue_power or cue_power > 2:
                    print("DEPP!")
                    continue

                try:
                    if str(
                            input(
                                "Wollen Sie in wirklich mit {} power schlagen".
                                format(cue_power))).lower() == "y":
                        # animationn weg
                        while my_cue.pow < 0.5 + 2 * cue_power:
                            my_cue.pow += 0.02

                            draw.clear()
                            tisch()
                            my_cue.draw(k[0])
                            draw.show(1)
                        # animation hin
                        while my_cue.pow > 1:
                            my_cue.pow -= 0.2 * cue_power

                            draw.clear()
                            tisch()
                            my_cue.draw(k[0])
                            draw.show(1)

                        k[0].v = my_cue.power(k[0], cue_power)
                        break
                except:
                    pass

        # Rand Kollision -------------------------------------------------------------------------
        for i in range(len(k)):
            if not k[i].eingelocht:
                if math.hypot(k[i].v.x, k[i].v.y) > 0.00001:
                    collision_border(k[i], current_player)
                else:
                    k[i].v = vektor.vektor(0, 0)

                # Kugeln Kollision -----------------------------------------------------------------------
        for i in range(len(k) - 1):
            if not k[i].eingelocht:
                next_collision(k[i])
                # collision_kugel(k[i], k[i + 1:])

        k[len(k) - 1].move()
        # Bewegen der Kugeln ---------------------------------------------------------------------
        #        for i in k:
        #            if not i.eingelocht:
        #                i.move()

        # draw.show(1)  # zeigt alle Objekte fuer 1 ms
        draw.clear()  # leert die Zeichenflaeche
コード例 #7
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()