Wuschel

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
skey-z
Beiträge: 18
Registriert: 04.05.2007 18:04
Wohnort: Velbert
Kontaktdaten:

Wuschel

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
skey-z
Beiträge: 18
Registriert: 04.05.2007 18:04
Wohnort: Velbert
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von skey-z am 16.05.2007 19:13, insgesamt 1-mal geändert.
PB 4.02, BB3D 1.98

Woran erkannt man einen Basic Programmierer?
-Er drückt beim absenden einer Nachricht F5, muahahaha!!!
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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...
Benutzeravatar
skey-z
Beiträge: 18
Registriert: 04.05.2007 18:04
Wohnort: Velbert
Kontaktdaten:

Beitrag 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^^.
PB 4.02, BB3D 1.98

Woran erkannt man einen Basic Programmierer?
-Er drückt beim absenden einer Nachricht F5, muahahaha!!!
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
skey-z
Beiträge: 18
Registriert: 04.05.2007 18:04
Wohnort: Velbert
Kontaktdaten:

Beitrag 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.
PB 4.02, BB3D 1.98

Woran erkannt man einen Basic Programmierer?
-Er drückt beim absenden einer Nachricht F5, muahahaha!!!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

würdest du auch den source mal posten?
würde mich einfach mal interessieren, wie du das gemacht hast...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
skey-z
Beiträge: 18
Registriert: 04.05.2007 18:04
Wohnort: Velbert
Kontaktdaten:

Beitrag 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
PB 4.02, BB3D 1.98

Woran erkannt man einen Basic Programmierer?
-Er drückt beim absenden einer Nachricht F5, muahahaha!!!
Antworten