Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Nibbles Klon
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.09.2007, 20:52    Titel: Nibbles Klon Antworten mit Zitat

Ich dachte mir, ich bräuchte mal wieder ein größeres projekt und hab mir für einen nibbles klon entschieden... der steckt noch in den windeln
/edit: problem gelöst!
/edit2: neues problem:
objekt lässt sich nicht "fressen"
/edit 3: Bis viele bugs behoben, bilder und
die aktuellste version ist ab sofort Hier: Klick
zu finden...
jeweils die Exe und den Source
_________________
// nicht mehr aktiv //


Zuletzt bearbeitet von The_Muh am 12.09.2007, 15:46, insgesamt 5-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 09.09.2007, 20:58    Titel: Antworten mit Zitat

Dein Problem ist, dass du EINMAL die Taste abfragst und dann in der unteren Schleife hängst. Probiere mal
Code:
dim as integer x = 200,y = 200
dim as string key, newkey
screenres 400,400

draw string (x,y),"#"
do
    newkey = inkey
    if newkey <> "" then key = newkey
    select case key
    [...]

newkey hat den Sinn, dass key solange erhalten bleibt, bis eine neue Taste gedrückt wird.

(edit: mein Posting bezieht sich natürlich auf eine frühere Version)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 09.09.2007, 21:32    Titel: Antworten mit Zitat

Zitat:
-Warum zum Henker ist die EXE 100 KB groß!? [MuhEdit]

Zitat:
weil das 150 zeilen codes sind?!?! [MuhEdit]
lachen vor lachen auf dem Boden rollen (Nur mal zur Info: Ein gewisses Projekt hat ~36 KB src fürs hauptmodul, und die exe ist !!mit!! Icon nur 72 KB groß...)
Zitat:
ein größeres projekt [This]
lachen
Das wird ja immer Besser vor lachen auf dem Boden rollen ein großes Projekt sind also 42-150 Zeilen vor lachen auf dem Boden rollen

[/lachkrampf]

Naja.
-Grafischer "Cursor"
-Sound
-Hintergrundgrafik.
-...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 09.09.2007, 21:36    Titel: Antworten mit Zitat

Du hast schon gelesen, dass das Projekt noch in den Windeln steckt??
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.09.2007, 21:38    Titel: Antworten mit Zitat

csderats hat Folgendes geschrieben:


Naja.
-Grafischer "Cursor"
-Sound
-Hintergrundgrafik.
-...


ähm... der code ist ne halbe stunde alt!?
was erwartest du?
das ich beim ersten post die version 10.0 release!?!
Ich wollte erstmal das gröbste weg haben, dann mach ich Grafik, sound usw.
Erst denken, dann posten, oder fresse halten!!
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 09.09.2007, 21:40    Titel: Antworten mit Zitat

Ich glaub, ich bin nicht (mehr) der Einzigster, der der Meinung ist, wir hätten dich hier (http://forum.qbasic.at/viewtopic.php?t=4220) einfach gehen lassen sollen... Zunge rausstrecken
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 09.09.2007, 21:41    Titel: Antworten mit Zitat

Mark Aroni hat Folgendes geschrieben:
Erst denken, dann posten, oder fresse halten!!
Oder Projekte einfach erst dann posten, wenn sie älter als eine halbe Stunde sind. mit den Augen rollen Oder erst wenn sie eine gewisse Reife erreicht haben. mit den Augen rollen mit den Augen rollen

Man könnte auch (ums nicht ganz einfach zu machen) die maximale Geschwindigkeit begrenzen...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick


Zuletzt bearbeitet von csde_rats am 09.09.2007, 21:43, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 09.09.2007, 21:42    Titel: Antworten mit Zitat

Zitat:

Wenn man im Glashaus sitzt, sollte man nicht mit Steinen werfen...

_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.09.2007, 21:43    Titel: Antworten mit Zitat

csderats hat Folgendes geschrieben:
Mark Aroni hat Folgendes geschrieben:
Erst denken, dann posten, oder fresse halten!!
Oder Projekte einfach erst dann posten, wenn sie älter als eine halbe Stunde sind. mit den Augen rollen Oder erst wenn sie eine gewisse Reife erreicht haben. mit den Augen rollen mit den Augen rollen


Ich hatte ein problem und wollte das NoPaste nich zumüllen, außerdem hätte ich früher oder später eh einen post aufgemacht...
wie gesagt:
erst denken, dann posten...
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 09.09.2007, 21:50    Titel: Antworten mit Zitat

Mark, ich hab dir hier mal schnell was geschrieben, angefangen hab ich als du dein Posting hier gemacht hast:
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=152
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 09.09.2007, 22:30    Titel: Antworten mit Zitat

was optisches: schreibe statt
Code:
case CHR(255,72) : key = newkey
    case chr(255,80) : key = newkey
    case chr(255,77) : key = newkey
    case chr(255,75) : key = newkey   

kürzer
Code:
case chr(255,72), chr(255,80), chr(255,77), chr(255,75) : key = newkey

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.09.2007, 22:34    Titel: Antworten mit Zitat

danke für den tipp, aber ich lass es der übersicht halber so wie ichs habe...
soo neuer code, neues problem... siehe oben (edit ist toll!)
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 09.09.2007, 22:39    Titel: Antworten mit Zitat

Wegen des if: da mischt du zwei Sachen. Vorschlag:
Zitat:
if ((spielerx-objektx)*(spielerx-objektx) + (spielery-objekty)*(spielery-objekty)) < 20 then

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 10.09.2007, 00:06    Titel: Antworten mit Zitat

hehe, das kommt davon wenn man nich richtig abschreibt Zunge rausstrecken
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 10.09.2007, 14:45    Titel: Antworten mit Zitat

nemored: fehlt bei dir in der Formel nicht noch das SQR?

Wenn ich mich nicht täusche, sollte es so sein:

Code:
if sqr((spielerx-objektx)^2 + (spielery-objekty)^2)) < 20 then ...

_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 10.09.2007, 18:39    Titel: Antworten mit Zitat

Das sqr ist im Prinzip nicht nötig, dann muss halt die Zahl dahinter bereits die Quadradzahl sein. Ist CPU-technisch sicher sinnvoller.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 10.09.2007, 20:31    Titel: Antworten mit Zitat

Soo
die erste spielbare version ist fertig... noch ohne Menü oder grafiken bzw. sound...
viel spaß beim spielen und nicht über den source meckern happy
Code:
dim as integer spielerY(1 to 80)
dim as integer spielerX(1 to 80)
Dim as integer Laenge = 2
dim as integer zeichnen, position, pruefen, punkte
dim as integer objektx
dim as integer objekty
dim as string key, newkey

screenres 400,400

'Bevor das spiel anfängt:
spielerY(1) = 200
spielerY(2) = 208
spielerX(1) = 200
spielerX(2) = 208
draw string (spielerx(1),spielery(1)),chr(219)
randomize timer
objektx = int(rnd*370)+1
objekty = int(rnd*370)+1
draw string (objektx,objekty),"O"
do : sleep 1 : key = inkey : loop until key <> ""

'nach dem ersten tastendruck:
do
    locate 1,1 : Print "punkte: "& punkte
    for pruefen = 2 to laenge
    if spielerX(1) = SpielerX(pruefen+1) and spielerY(1) = spielerY(pruefen+1) then beep : end
    next pruefen

    'futter:
    draw string (objektx,objekty),"O"
    if ((spielerX(1)-objektx)*(spielerX(1)-objektx) + (spielerY(1)-objekty)*(spielerY(1)-objekty)) < 100 then
        laenge +=1
        Punkte += 20 * (laenge/2)
        randomize timer
        objektx = int(rnd*360)+20
        objekty = int(rnd*360)+20
    end if
   
    'tastendruck:
    newkey = inkey
    select case newkey
    case CHR(255,72) : if key = chr(255,80) then key = key : else:key = newkey
    case chr(255,80) : if key = chr(255,72) then key = key : else:key = newkey
    case chr(255,77) : if key = chr(255,75) then key = key : else:key = newkey
    case chr(255,75) : if key = chr(255,77) then key = key : else:key = newkey   
    case chr(27) : end
    case Chr(13) : sleep : continue do
    end select
   
    'verarbeitung:
   
    select case key
    case CHR(255,72)            'oben
            spielery(1) -= 8
            if spielery(1) = 0 then end
       
    case chr(255,80)              'unten
            spielery(1) += 8
            if spielery(1) = 392 then end
       
    case chr(255,77)              'rechts
            spielerx(1) += 8
            if spielerx(1) = 392 then end
       
    case chr(255,75)              'links
            spielerx(1) -= 8
            if spielerx(1) = 0 then end
    end select
   
    sleep 40
    cls
    select case Key
    case CHR(255,72)  'oben
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    case chr(255,80)  'unten
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    case chr(255,77)  'rechts
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    case chr(255,75)  'links
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    end select

    for zeichnen = 1 to laenge
        draw string (spielerx(zeichnen),spielery(zeichnen)),CHR(219)
    next zeichnen
loop

_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 10.09.2007, 21:56    Titel: Antworten mit Zitat

Bei mir läuft das Spiel etwas zu schnell..
Steuerung ist ok, aber leider nicht präzise genug, weil es einfach zu schnell läuft.

//Noch ein Edit:
Hardcore Mod: (mit SLEEP 35, aber nur "etwas" schwerer..
Änderungen:
- SLEEP 35 eingefügt, um das Spiel "zuverlangsamen"
- POINT eingefügt, um einen Bug zu beseitigen
- spielerY und SpielerX auf Arrey auf (1 to 99999) gesetzt.. (das dürfte auf jeden Fall reichen xD
- die Länge erhöht sich jetzt jedesmal um 5 grinsen
- ein Paar kleinere Bugs wurden entfernt

Also hier erstmal meine editierte Version:
So ist das Spiel schon brauchbarer zwinkern
Code:
dim as integer spielerY(1 to 99999)
dim as integer spielerX(1 to 99999)
Dim as integer Laenge = 2
dim as integer zeichnen, position, pruefen, punkte
dim as integer objektx
dim as integer objekty
dim as string key, newkey

screenres 400,400

'Bevor das spiel anfängt:
spielerY(1) = 200
spielerY(2) = 208
spielerX(1) = 200
spielerX(2) = 208
draw string (spielerx(1),spielery(1)),chr(219)
randomize timer
rtr:
objektx = int(rnd*370)+1
objekty = int(rnd*370)+1
draw string (objektx,objekty),"O"
do : sleep 1 : key = inkey : loop until key <> ""

'nach dem ersten tastendruck:
do
    locate 1,1 : Print "punkte: "& punkte
    locate 2,1:print "debug: ";laenge
    for pruefen = 2 to laenge
    if spielerX(1) = SpielerX(pruefen+1) and spielerY(1) = spielerY(pruefen+1) then beep : end
    next pruefen

    'futter:
    draw string (objektx,objekty),"O"
    if ((spielerX(1)-objektx)*(spielerX(1)-objektx) + (spielerY(1)-objekty)*(spielerY(1)-objekty)) < 100 then
        laenge += 5
        Punkte += 20 * (laenge/2)
        nochmal1:
        randomize timer
        objektx = int(rnd*360)+20
        objekty = int(rnd*360)+20
        if point (objektx+1,objektx+1)=15 then
           
            draw string (objektx,objekty),"O"

            goto nochmal1
        end if
       
    end if
   
    'tastendruck:
    sleep 35
    newkey = inkey
    select case newkey
    case CHR(255,72) : if key = chr(255,80) then key = key : else:key = newkey
    case chr(255,80) : if key = chr(255,72) then key = key : else:key = newkey
    case chr(255,77) : if key = chr(255,75) then key = key : else:key = newkey
    case chr(255,75) : if key = chr(255,77) then key = key : else:key = newkey   
    case chr(27) : end
    case Chr(13) : sleep : continue do
    end select
   
    'verarbeitung:
   
    select case key
    case CHR(255,72)            'oben
            spielery(1) -= 8
            if spielery(1) = 0 then end
       
    case chr(255,80)              'unten
            spielery(1) += 8
            if spielery(1) = 392 then end
       
    case chr(255,77)              'rechts
            spielerx(1) += 8
            if spielerx(1) = 392 then end
       
    case chr(255,75)              'links
            spielerx(1) -= 8
            if spielerx(1) = 0 then end
    end select
   
    sleep 40
    cls
    select case Key
    case CHR(255,72)  'oben
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    case chr(255,80)  'unten
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    case chr(255,77)  'rechts
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    case chr(255,75)  'links
        for position = laenge to 1 step -1
            spielerX(position+1) = spielerX(position)
            spielerY(position+1) = spielerY(position)
        next
    end select

    for zeichnen = 1 to laenge
        draw string (spielerx(zeichnen),spielery(zeichnen)),CHR(219)
    next zeichnen

loop

_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 12.09.2007, 14:50    Titel: Antworten mit Zitat

soo die aktuellste version ist ab sofort Hier: Klick
zu finden...
jeweils die Exe und den Source
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 12.09.2007, 14:55    Titel: Antworten mit Zitat

ein kleiner steuerungsfehler..
bitte
Code:
if laenge < 90 then
        sleep 100 - laenge
    else
        sleep 10
    end if

in zeile 51 verschieben.. und sleep 80 entfernen
dann passts perfeckt zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz