Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

31

09.10.2008, 17:46

Zitat von »"xardias"«

Neue URL:
http://dev-area.net:8095/
un-web-2.0 ;).
Dann bau nen Embedded Video und Hintergrundmusik ein und bastel darunter einen Blog.

P.S. Wenn die Verbindung getrennt wird kann man einfach Steine setzen egal ob man dran ist oder nicht. :) Bzw. bei ner schlechten Internetverbindung kann man auch einfach schnell weiterspielen und den schwarzen garnicht zum Zuge kommen lassen :D

Edit: Genauere Untersuchungen zeigen, es werden dann zuerst meine Züge ausgeführt und danach die des Gegners. Es sind dann zwar die gleiche Anzahl an Zügen, aber die Gewinnbedingungen werden nach jedem Zug berechnet.


(Link)


(Link)

War aber schon sehr lustig :)

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

32

09.10.2008, 18:04

Jo beim Umbau ist ein kleinwenig wieder kaputt gegangen.. Wenn ich das refactoring fertig habe werde ich die Server-Client-Kommunikation komplett neuschreiben... da geht momentan viel zu viel schief ;).

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

33

10.10.2008, 13:37

Kleines update. Ein bischen mehr UI in der Lobby. Spiele werden nun auch von der Lobby erstellt, ich probiere nacher mal 4 gewinnt zu implementieren, sollte mit neuschreiben der Regeln getan sein ;) (kein AJAX kram oder so mehr).

Und ein ganz nettes Feature: So lange das Spiel aktiv ist, egal ob man weiter spielt oder nicht: sobald man in die Lobby zurück kehrt wird man gefragt ob man das Spiel weiter spielen möchte.

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

34

10.10.2008, 14:33

Ich hab 4 Gewinnt fix halb implementiert gerade ;). Checke bisher nur auf 4 in horizontaler Reihe, hab nur leider grad keine Zeit mehr.. URL ist die selbe:
http://dev-area.net:8095/

(Edit hab grad gelesen, dass das 4Gewinnt Feld kleiner ist.. 6x7. Passe ich noch an).
Kompakte 50 Zeilen Code plus Beschreibung. für das ganze Spiel, den Rest macht das Framework:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from wg.models.squareboard import Stone, SetStoneAction

class ConnectFourRules(object): 
    def start_game(self, model):
        model.active_player = model.white
        
    def check_range(self, model, range):
        white_connected = 0
        black_connected = 0
        for x, y in range:
            field = model.board.fields[x][y]
            
            if field:
                white_connected = white_connected+1 if field.owner is model.white else 0 
                black_connected = black_connected+1 if field.owner is model.black else 0 
            else:
                black_connected = white_connected = 0
                
            if white_connected == 4:
                return [model.white]
            elif black_connected == 4:
                return [model.black]

    def determine_winner(self, model):
        dim =  model.board.dimensions
        xrange = [(x, y) for x in range(dim[0]) for y in range(dim[1])]
        yrange = [(x, y) for y in range(dim[1]) for x in range(dim[0])]
        
        winner = self.check_range(model, xrange) 
        winner = winner or self.check_range(model, yrange)
        return winner
            
    def get_possible_moves(self, model, player): 
        possible = []
        stone = Stone(Stone.STONE, player)
        for x in range(model.board.dimensions[0]):
            for y in reversed(range(model.board.dimensions[1])):
                if model.board.fields[x][y] is None:
                    possible.append(SetStoneAction(player, (x, y), stone))
                    break
        return possible

    def make_move(self, model, move):
        (x, y) = move.position
        model.board.fields[x][y] = Stone(Stone.STONE, move.player)
        model.active_player = model.white if move.player is model.black else model.black
        model.winner = self.determine_winner(model)

Auch wenn hier nicht viele Python lesen können.. der code ist eigentlich recht simpel und selbsterklärend. Für denjenigen den es interessiert ;)

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

36

10.10.2008, 18:12

Die KI muss aber noch extrem angepasst werden. Gerade einfach schön 4 Steine nebeneinander gelegt und die KI setzt ganz woanders hin :)
Und es fehlt der Button für ein neues Spiel.

Die restlichen Fehler behalt ich erstmal für mich bis du fertig bist mit der Umstellung :)

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

37

18.10.2008, 17:32

So, hatte die Woche wenig Zeit, daher hats update etwas gedauert.

Den Client habe ich komplett überarbeitet. Es sollte keine Probleme mit der Synchronisation mehr geben, dafür sorgt ein Buffer indem eingehende Daten synchronisiert werden. Der Javascript Code ist sogar recht ansehnlich geworden. OOP in Javascript ist mehr schlecht als recht aber man kann sich dran gewöhnen.
http://dev-area.net:8095/games/othello/script.js

Das Spiel ist unter der gewohnten Adresse zu finden.
http://dev-area.net:8095/

Was gibts neues?
- Sync-bugs zerschlagen.
- New Game klappt wieder ;)
- Benachrichtigung über den Spielausgang werden in einer Msg Box angezeigt.
- Spielstand wird komplett wiederhergestellt auch wenn man den Browser schließt oder aktualisiert.
- Die Lobby fragt nach ob man (z.B. nach dem schließen des Browsers) das laufende Spiel fortsetzen möchte.
- Reaktionszeit der KI verbessert (kommt ohne polling aus)
- Animationen überarbeitet. (Sauberer animiert, weniger fehleranfälliger, performanter)

Auf der TODO Liste stehen noch:
- Serverseitiges refactoring (Ist mitlerweile ein einziger Flickenteppich, da gibts viel zu überarbeiten)
- Eine vernünftige generische min-max AI (Also Spielunabhängig).
- 4-Gewinnt mit allen Regeln implementieren ;)
- Dame implementieren (Wobei das komplexer wird da man nicht mehr nur Steine setzen sondern auch bewegen kann).
- Modding System implementieren (Erweitern des Regelwerks)
- Windows aktivieren um das ganze im IE zu testen (Ich bin zu Faul die Tante von MS anzurufen um den dummen Aktivierungscode zu bekommen)

Wäre schön wenn das jemand nochmal kurz testen könnte. Ich habe einige Runden gespielt und keine Fehler gefunden, also immer her damit.

Grüße,
xardias


Edit: Man kann sogar in Javascript objektorientiert arbeiten.. ist bloß etwas Gewöhnungsbedürftig von der Syntax her.
http://dev-area.net:8095/games/othello/script.js

38

18.10.2008, 19:35

Hmm... sieht schlecht aus... sind wohl alle Bugs draußen :(

39

18.10.2008, 21:03

hab nen gameplay-bug gefunden..


(Link)

40

18.10.2008, 21:57

Zitat von »"Zera"«

hab nen gameplay-bug gefunden..


(Link)
Gings danach nicht weiter? Najo... da sollte dann vielleicht eine Gewinnentscheidung kommen. ;)

Werbeanzeige