C / Palib (NDS Programmierung) Problem ERLEDIGT

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

feuerball11

Betreff: C / Palib (NDS Programmierung) Problem ERLEDIGT

BeitragSa, Feb 19, 2011 12:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute.

hat sich erledigt

Habe vor kurzem angefangen das Programmieren für den NDS zu lernen.

Es klappt auch soweit alles, jetzt habe ich bloß ein Problem wo ich nicht weiß wo der Fehler liegt.

Der Programmablauf sieht wie folgt aus (Code am Ende)

-Start
-Wenn Stylus aufkommt, Dort 4 "x" Zeichnen
-Wenn A gedrückt wurde auf Stylus warten
-An der stelle des Stylus 4 "o" Platzieren
-Die 4 "o" Solange nach unten bewegen das sie auf die "X" Treffen.


Wer die PAlib Befehle nicht kennt diese kurz erläutert:

PA_Init() : PAlib "starten"
PA_LoadDefaultText(screen,background) : Textsystem auf angegebenen Bildschrim (0 = Unten/ 1 = oben) laden
PA_OutputText(screen,x*8,y*8,text) Text an Angegebene Stelle ausgeben (Angaben nicht in Pixel sondern in 8-Pixelschritten)

Und die Variablen:

Stylus.Held : Stylus Berührung mit Screen
Stylus.X : Stylus X Potition
Stylus.Y : Stylus Y Potition
Pad.Newpress.A : Button A Gedrückt (ähnlich Keyhit)


Jetzt Funktioniert das alles bloß nicht wie geplant.. Die "o" zerstückeln sich und bewegen sich nicht mehr.. Nun Simple Frage (Oder eben doch nicht Very Happy) Warum ist dies so?

Hoffe Jemand kann mir helfen. Gruß Feuerball11

Download als .nds (Für Emulator) Download






Code:

Code: [AUSKLAPPEN]
#include <PA9.h>
int main()
{
   PA_Init();
   int bot[32][24];
   int i;
   int j;
   int px;
   int py;
   int f=1;
   int botax;
   int botay;
   PA_LoadDefaultText(0,0);
   PA_LoadDefaultText(1,0);
   while(1)
   {
      if(Stylus.Held)
      {
         if(bot[Stylus.X/16*2][Stylus.Y/16*2]==0)
         {
            bot[Stylus.X/16*2][Stylus.Y/16*2]=1;
            bot[Stylus.X/16*2+1][Stylus.Y/16*2]=1;
            bot[Stylus.X/16*2][Stylus.Y/16*2+1]=1;
            bot[Stylus.X/16*2+1][Stylus.Y/16*2+1]=1;
         }
      }
      if(Pad.Newpress.A)
      {
         while(f==1)
         {
            PA_OutputText(1,1,1,"A Presed");
            if(Stylus.Held)
            {
               if(bot[Stylus.X/16*2][Stylus.Y/16*2]==0)
               {
                  bot[Stylus.X/16*2][Stylus.Y/16*2]=2;
                  bot[Stylus.X/16*2+1][Stylus.Y/16*2]=3;
                  bot[Stylus.X/16*2][Stylus.Y/16*2+1]=3;
                  bot[Stylus.X/16*2+1][Stylus.Y/16*2+1]=2;
                  px = Stylus.X;
                  py = Stylus.Y;
                  f=0;
                  PA_OutputText(1,1,1,"         ");
               }
            }
            PA_WaitForVBL();
         }
      }
      if (f==0)
      {
         botax = px/16*2;
         botay = py/16*2;
         if(bot[(px/16*2)][py/16*2+2] == 0)
         {      
            py = py +1;
         }
         if (botay != py/16*2)
         {
            bot[botax][botay] = 0;
            bot[botax+1][botay] = 0;
            bot[px/16*2][py/16*2+2] = 2;
            bot[px/16*2+1][py/16*2+2] = 2;
         }
         PA_OutputText(1,1,1,"PX: %d PY: %d",px,py);
      }
      for (i=0;i<=31;i++)
      {
         for (j=0;j<=23;j++)
         {
            if(bot[i][j] == 1) PA_OutputText(0,i,j,"X");
            if(bot[i][j] == 0) PA_OutputText(0,i,j," ");
            if(bot[i][j] == 2) PA_OutputText(0,i,j,"o");
            if(bot[i][j] == 3) PA_OutputText(0,i,j,"o");
         }
      }
      PA_WaitForVBL();
   }
   return 0;
}
  • Zuletzt bearbeitet von feuerball11 am Mi, Feb 23, 2011 6:33, insgesamt einmal bearbeitet

gameworx

BeitragSo, Feb 20, 2011 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Code verstehe ich zwar leider nur Bahnhof, aber das Programm läuft auf meinem NDSlite (nicht Emu) wie beschrieben.

Bei Programmstart steht da schon ein "x" in der unteren rechten Ecke (ganz rechts am Rand, ich schätze 3. Zeile von unten). Ist das gewollt?

Die vier "x" kann ich immer setzen und das funktioniert einwandfrei.

Die "o" kommen nur 1x, nachdem ich die Taste "A" gedrückt habe und sind durch eine Leerzeile auseinandergerissen bzw. werden sofort durch "x" überschrieben, wenn ich Stylus auf Display lasse. BTW: es müsste "pressed" heissen.

Kannst du es irgendwie machen, dass das Programm sich normal beenden lässt (z. B. durch Druck auf "start")? Dann brauche ich nicht für jeden Test booten. Smile
AMD Athlon II X3 440 (3 GHz), 4GB Ram, ATI Radeon HD 5450, Win 7

BladeRunner

Moderator

BeitragSo, Feb 20, 2011 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja, gameworx, Du hast wohl das klitzekleine "hat sich erledigt" was sich mitten im Posting versteckt überlesen.

Feuerball, Wenn sich ein Problem erledigt hat, solltest Du das im Threadtitel und fett im Posting einfügen. Sonst werden sich Leute ärgern weil sie halfen wo es nix mehr zu helfen gab.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group