Seite 1 von 1

Wuschel

Verfasst: 16.05.2007 18:42
von skey-z
Moin Leutz,

nun habe ich mich ein paar Tage mit PB beschäftigt und möchte euch mein Einstanprojekt präsentieren.

Wuschel Version 1.0

Was ist Wuschel:

Ein Wuschel ist ein virtuelles Haustier, welches gefüttert und unterhalten werden muss. Es möchte gesäubert werden und zwischendurch auch mal schlafen.

Wen diese Beschreibung an etwas erinnert, der Hat recht, es ist ein Tamagochi Klon. Für den Anfang wollte ich etwas leichtes programmieren, um mich in PB einzuarbeiten.

Features:
-Emotionsanzeige
-Bedürfnisanzeige mit zusätzlicher Textanzeige

Screen:
Bild

Download: ~20kb, rar
http://www.snakebuild.de/stuff/pb/wuschel/wuschel.rar

Preview:
Für eine kleine Übung finde ich es ok, jedoch schlummern da noch ein paar Ideen im Hinterkopf, die ich in der 2. Version einbauen möchte:

-mehrere Benutzer
-verschiedene Wuscheltypen
-bessere Grafik^^
-zwischenmenschliche Beziehungen->Nachwuchs
-usw

Hoffe auf viel Feedback und Verbesserungsvorschläge

mfg skey-z

verschoben - das ist ja ein spiel keine anwendung - Kaeru fecit

Verfasst: 16.05.2007 18:53
von ts-soft
Korrigiere bitte den Downloadlink, Du hast nur das Bild verlinkt :wink:
//edit: hat sich erledigt

Ohne zu Testen: Du solltest Dich entscheiden, englisch oder deutsch, aber
laut Screenshot sieht es denglish aus :mrgreen:

Verfasst: 16.05.2007 18:57
von skey-z
1. habe auch erst im nachhinein gemerkt, dass ich vergessen habe den link zu ändern(verdammtes c&p)

2. Das mit dem denglisch ist mehr oder weniger absicht, ich arbeite meistens mit englischen Variablen, da sie zumeist kürzer sind und in diesem fall wären die deutschen Wörter zu lang und würden nicht in die Statusfelder passen.

Verfasst: 16.05.2007 18:59
von D@nte
Nette Idee
aber die langzeit motivation lässt nen bisserl zu wünschen über, nein nicht weil's (noch ein) Tamagochi-Klon ist sondern eher weil ich in den 30seks die ich's grad an hatte ca 25 Aktionen ausführen musste...

Fänd's gut wenne die Delays um einiges höher setzt denn dein vieh is ja nur am fressen & schei**en wenn's das gemacht hat wieder fressen & schei**en, dann bisserl spielen und Sekundenschlaf dann wieder von vorne...

Was ich gut finden würde:
- Mehr Richtung "Echtzeit", so dass man das Ding evtl auch mal über Nacht laufen lassen kann (evtl. auch intressant für spätere Features Stihwort: Evolution)
- Buttons für Aktionen neben dem Ding (Die Menü klickerei nervt imo)
- Überbeanspruchung (zuviel einer Aktion)

[Done] Achja der richtige Link wäre noch nett für Leute die nicht soviel langeweile haben wie ich ;) [/Done]

Spiellaufzeit 25 Sekunden...

Verfasst: 16.05.2007 19:11
von skey-z
@dante

Es ist auch nicht wirklich für die Langzeitmotivation gedacht, dafür hat es einfach zu wenige Features, das werde ich dann natürlich in der nächsten Version berücksichtigen.

Was meinst du eigentlich mit dem richtigen Link, habe gesehen, dass mir winrar das "w" am Anfang groß geschrieben hat, mein Firefox hatte damit keine Probleme, habs jedenfalls auf dem Server geändert.

deine Vorschläge hatte ich auch schon so ähnlich im Hinterkopf, muss mir das erst mal alles aufschreiben, bevor ich mich ans Werk mache, sonst endet es wie andere Projekte, die nie Fertig werden^^.

Verfasst: 16.05.2007 19:16
von D@nte
skey-z hat geschrieben: Was meinst du eigentlich mit dem richtigen Link, habe gesehen, dass mir winrar das "w" am Anfang groß geschrieben hat, mein Firefox hatte damit keine Probleme, habs jedenfalls auf dem Server geändert.
War darauf bezogen das ich bisserl auf deinem Space stöbern musste bis ich den richtigen Link aus deinem screen.jpg gemacht hab, hat nur ne Weile gedauert bis mein Post fertig war, während dessen hatteste den LInk scho von screen auf wuschel.rar geändert und ts-soft und du hatten scho gepostet (dauert ja jedesmal 25 Seks bis das Vieh krepiert)

Verfasst: 23.05.2007 12:00
von Kaeru Gaman
das Vista-Bla hab ich mal abgeschnitten....

zu Wuschel:
die oberfläche könnte man wesentlich ansprechender gestalten.

für die bedienung würde ich mir buttons wünschen.
so menupunkte ohne shortcuts macht die bedienung zu ner qual.
da hab ich keine lust, die funktionalität des algorithmus ausgiebig zu testen.

die anzeige der werte wäre schöner als farbige balken, und nicht so nichtssagende zahlen.
bei den zahlen weiß man nicht, wo die obergrenze ist.
mit balken könnte man die 0 als vollen, grünen balken darstellen,
und je mehr der wert ansteigt, desto kleiner und roter wird der balken.

zumindest die buttons solltest du machen, dann teste ich auch gerne mal ausgiebig den algorithmus.


zu dem punkt:
> (dauert ja jedesmal 25 Seks bis das Vieh krepiert)

bei mir laufen die geschehnisse nicht zu schnell,
das kann aber daran liegen, dass ich nen TFT mit fester refresh-rate hab.
bei anderen systemen mit wesentlich höherer möglicher framerate
läuft dein proggi dann wohl zu schnell durch.
du solltest also ne echte timer-steuerung einbaun.

am elegantesten wäre es, wenn du die werteberechnung in einen timer-callback packst....

Verfasst: 23.05.2007 14:32
von skey-z
@kaeru

Hab ja gesagt, dass ich dieses "Spiel" geschrieben habe um mich ein wenig in PB einzuarbeiten und dass es noch ne bessere Version geben wird.

Und nen kleinen Timer hatte ich schon eingebaut, es wird frühestens jede halbe Sekunde eine Variable um eins erhöht und je nach wert auch das dazugehörige Bedürfnis, also es hat nichts mit der Bildwiederholrate zu tun, wenn es bei jemandem schneller laufen sollte.

Verfasst: 23.05.2007 15:23
von Kaeru Gaman
würdest du auch den source mal posten?
würde mich einfach mal interessieren, wie du das gemacht hast...

Verfasst: 18.11.2007 18:49
von skey-z
Sry, habe erst jetzt gesehen, dass noch jemand was dazu geschrieben hat, falls du den Source noch sehen möchtest, bitte schön:

Code: Alles auswählen

;Projekt:       Wuschel - Tamagotchi Clon
;Author:        skey-z

;{ Define Vars
    
    Enumeration 
        
        #win_main
        #win_screen
        
        #menu
        
        #menu_new
        #menu_quit
        
        #menu_feed
        #menu_play
        #menu_clean
        #menu_sleep
        
        #menu_help
        #menu_info
        

        #gad_status
        
        
        #spr_emo0
        #spr_emo1
        #spr_emo2        
        
        #spr_eat
        #spr_play
        #spr_clean
        #spr_sleep
        
        
                
    EndEnumeration
    
    Global event.l
    
    Global quit.b
    
    Global stat_eat.b
    Global stat_clean.b
    Global stat_play.b
    Global stat_sleep.b
    
    Global ico_eat.l
    Global ico_clean.l
    Global ico_play.l
    Global ico_sleep.l
    
    Global dead.b
    Global max.b = 100
    
    Global t_start.l = ElapsedMilliseconds()
    
    Dim emo(2)
    Global emotion.b
;}

;{ Create Window
If InitSprite() = 0
    MessageRequester("Error", "Can't initialize screen & sprites", 0)
    End
EndIf

If OpenWindow(#win_main, 0, 0, 210, 250, "Wuschel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

    If CreateGadgetList(WindowID(#win_main))
        
        ;{ Menu
        If CreateMenu(#menu, WindowID(#win_main))
            MenuTitle("Spiel")
                MenuItem(#menu_new, "Neues Spiel")
                MenuBar()
                MenuItem(#menu_quit, "Beenden")
                
            MenuTitle("Aktion")
                MenuItem(#menu_feed, "Füttern")
                MenuItem(#menu_play, "Spielen")
                MenuItem(#menu_clean, "Säubern")
                MenuItem(#menu_sleep, "Schlafen")
                
            MenuTitle("Hilfe")
                MenuItem(#menu_help, "FAQ")
                MenuItem(#menu_info, "Info")
        EndIf
        ;}
        
        ;{ Status Bar
        If CreateStatusBar(#gad_status, WindowID(#win_main))
            AddStatusBarField(45)
            AddStatusBarField(55)
            AddStatusBarField(55)
            AddStatusBarField(55)
        EndIf
        ;}
    
        ;{ Window Screen & Sprites
        If OpenWindowedScreen(WindowID(#win_main), 5, 0, 200, 200, 0, 0, 22)
                
            spr_eat = LoadSprite(#spr_eat, "ico_eat.bmp")
                    TransparentSpriteColor(#spr_eat, RGB(255,0,255))
            spr_play = LoadSprite(#spr_play, "ico_play.bmp")
                    TransparentSpriteColor(#spr_play, RGB(255,0,255))
            spr_clean = LoadSprite(#spr_clean, "ico_clean.bmp")
                    TransparentSpriteColor(#spr_clean, RGB(255,0,255))
            spr_sleep = LoadSprite(#spr_sleep, "ico_sleep.bmp")
                    TransparentSpriteColor(#spr_sleep, RGB(255,0,255))
                
            For i = 0 To 2
                emo(i) = LoadSprite((#spr_emo0+i), "emo_" + Str(i) +".bmp")
                    TransparentSpriteColor((#spr_emo0+i), RGB(255,0,255))
            Next
          
        Else
          MessageRequester("Error", "Can't open windowed screen!", 0)
          End
        EndIf
        ;}
    EndIf
    

;}
    
    Repeat
        
        ;{ Event Handling
        Repeat
        
            event = WindowEvent()
        
            Select event
                
                Case #PB_Event_CloseWindow
                    End
                    
                Case #PB_Event_Menu
                    
                    ;{ Menu auswahl
                    Select EventMenu()
                        
                        Case #menu_new
                            stat_eat = 0
                            stat_play = 0
                            stat_clean = 0
                            stat_sleep = 0
                            
                            frame = 0
                            dead = #False
                            
                        Case #menu_quit
                            End
                            
                        Case #menu_feed : stat_eat -25
                        Case #menu_play : stat_play -25
                        Case #menu_clean : stat_clean -25
                        Case #menu_sleep : stat_sleep -25
                        
                        Case #menu_help
                            MessageRequester("FAQ", "Ein Wuschel ist ein virtuelles Hasutier. Es möchte gefüttert und unterhalten werden," + Chr(10) + "du musst es sauber halten und zwischendurch möchte es auch einmal schlafen" + Chr(10) + "Kommst du diesen Verpflichtungen nicht nach, wird es dir verenden" + Chr(10) + "Der Maximalwert jedes Attributes liegt bei 100")
                        
                        Case #menu_info
                            MessageRequester("INFO", "Projekt: Wuschel" + Chr(10) + "Version : 1.0" +Chr(10) + "Autor: Sascha Kruse")
                    EndSelect
                    ;}
                   
            EndSelect
            
       Until event = 0
       ;}
       
        FlipBuffers() 
        ClearScreen(RGB(0, 0, 0))
        
        ;{ Emotion
            
            If (stat_eat => max) Or (stat_play => max) Or (stat_clean => max) Or (stat_sleep => max)
            
                If Not dead
                    MessageRequester("OH NEIN!!!", "Dein Wuschel ist verendet" + Chr(10) + "Du bist ein schlechter Pfleger")
                EndIf
                
                emotion = 2
                dead = #True
                
            ElseIf (stat_eat => 50) Or (stat_play => 50) Or (stat_clean => 50) Or (stat_sleep => 50)
                emotion = 1
            Else
                emotion = 0
            EndIf
            
            DisplayTransparentSprite((#spr_emo0+emotion), 0, 0)
        ;}
        
        ;{ Timer
        If (ElapsedMilliseconds()-t_start > 500)
        
            t_start = ElapsedMilliseconds()

            
            ;{ frames
            
            If Not dead
                Select frame
                    Case 1 : stat_eat +10
                    Case 2 : stat_play +5
                    Case 3 : stat_clean +2
                    Case 4 : stat_sleep +1
                    Case 5 : frame = 0
                EndSelect

                frame +1
            EndIf            
            ;}
            
        EndIf
        ;}
        
        ;{ StatusBar Text
        StatusBarText(#gad_status, 0, "eat:" + Str(stat_eat), #PB_StatusBar_Center)
        StatusBarText(#gad_status, 1, "play:" + Str(stat_play), #PB_StatusBar_Center)
        StatusBarText(#gad_status, 2, "clean:" + Str(stat_clean), #PB_StatusBar_Center)
        StatusBarText(#gad_status, 3, "sleep:" + Str(stat_sleep), #PB_StatusBar_Center)
        ;}
        
        ;{ EAT       
        If (stat_eat => 75)
            DisplayTransparentSprite(#spr_eat, 2, 2)
        ElseIf (stat_eat => 50) And (ElapsedMilliseconds()-t_start < 250)
            DisplayTransparentSprite(#spr_eat, 2, 2)
        ElseIf (stat_eat < 0)
            stat_eat = 0
        EndIf
        ;}
        
        ;{ PLAY        
        If (stat_play => 75)
            DisplayTransparentSprite(#spr_play, 22, 2)
        ElseIf (stat_play => 50) And (ElapsedMilliseconds()-t_start < 250)
            DisplayTransparentSprite(#spr_play, 22, 2)
        ElseIf (stat_play < 0)
            stat_play = 0
        EndIf
        ;}
        
        ;{ CLEAN       
        If (stat_clean => 75)
            DisplayTransparentSprite(#spr_clean, 42, 2)
        ElseIf (stat_clean => 50) And (ElapsedMilliseconds()-t_start < 250)
            DisplayTransparentSprite(#spr_clean, 42, 2)
        ElseIf (stat_clean < 0)
            stat_clean = 0
        EndIf
        ;}
        
        ;{ SLEEP        
        If (stat_sleep => 75)
            DisplayTransparentSprite(#spr_sleep, 62, 2)
        ElseIf (stat_sleep => 50) And (ElapsedMilliseconds()-t_start < 250)
            DisplayTransparentSprite(#spr_sleep, 62, 2)
        ElseIf (stat_sleep < 0)
            stat_sleep = 0
        EndIf
        ;}
        
        Delay(5)
        
    ForEver

Else
    
    MessageRequester("Error", "Unable to create window")
EndIf