webForumDet fria alternativet

FrågesportSpel - arrayer + while loop igen :)

7 svar · 506 visningar · startad av mikael_a

mikael_aMedlem sedan mars 2000502 inlägg
#1

Hej,

Nu blir jag snart gråhårig... Finns det en vänlig själ där ute som har tid att hjälpa mig med två problem? (source koden är bifogad)

Jag försöker att göra ett frågesportspel... Där du får svara på olika frågor i olika katekorier/svårighetsgrader... Om du svarar rätt på nivå 1 går du vidare till nivå 2 osv... + att du får olika mycket poäng beroende på vilken nivå du klarar av...

nu till problemet...

kör jag koden nu så får jag inget fel, men svarar jag rätt på nivå 1 och nivå 2 skall komma upp, så verkar det som om min loop fastnar... det händer inget... svarar jag däremot fel så kommer nivå två upp.. (frågorna slumpas fram ifrån en array nivå 1 frågor 1-5 nivå 2 frågor 6-10 osv... de skall bara visas en gång.. troligen är det själva slumpningen och min koll av arrayen som blir fel... har någon tid, lust och ork att hjälpa mig?

Problem nummer två är att få highscore listan att fungera... skulle vilja ha en text fil som läses in, men detta fungerar inte alls..

som sagt var koden är bifogad...

min while loop ser ut som nedan följer...


	while (frågesvar == true);
							{
							do
							{
							slumpatTal = 5+(int) (9*Math.random());	//slumpar ett tal mellan 5 - 10
							}

							while(tal[slumpatTal-1]!=0);

							//Sätt talet som du har hittat till använt i arrayen
							tal[slumpatTal-1]=1;

							System.out.println("");
							System.out.println("H„r kommer andra fr†gan...");

							System.out.println(" ");

hälsningar micke

PeWMedlem sedan juni 20006 839 inlägg
#2

Nu blir jag snart gråhårig... Finns det en vänlig själ där ute som har tid att hjälpa mig med två problem? (source koden är bifogad)

Ja du... regel nummer ett är att dela upp huvudproblemet i mindre delar - inte tvärtom som i start.java ;)
En bra (och nödvändig) start är att skissa på hela programmet och "gruppera" vad man vill ha gjort. Att bara hacka ned programflödet från början till slut är sällan lyckat, speciellt om man som i ditt fall har flera val att göra.

Eftersom det här är java är ju byggandet av klasser och objekt utmärkta verktyg till detta. Men tänk då på att man med klasser ska "kapsla in" varje problem för sig och är det något som ständigt återkommer är det bättre göra klasserna generella så att det går att göra flera instanser av dem.

En hint om ditt problem med "hängning":

while (frågesvar == true);

När slutar denna att snurra i din kod?

mikael_aMedlem sedan mars 2000502 inlägg
#3

ok... jag har skissat upp allt, men man lär sig. Har inte hållt på så länge med java.

while loopen avslutas väl när den har hittad ett slumptal den kan presentera?

mikael_aMedlem sedan mars 2000502 inlägg
#4

kan man inte använda if (frågesvar == true); kör nedanstående else break; ?

sgtpepperMedlem sedan apr. 20005 524 inlägg
#5

mikael_a skrev:

kan man inte använda if (frågesvar == true); kör nedanstående else break; ?

Jo, men den kod som skall köras om if-satsen är sant måste ligga inom ett { }-block. Du avslutar ju if-satsen med semikolon och då avslutas if-satsen direkt och koden under körs oavsett vilkoret, så här skall det se ut:

if (frågesvar) [b]{[/b]
    // vilkoret sant. gör någonting här
[b]}[/b] else [b]{[/b]
    // vilkoret falskt. gör något annat här
[b]}[/b]
PeWMedlem sedan juni 20006 839 inlägg
#6

mikael_a skrev:

Har inte hållt på så länge med java.

Det jag babblade om är inte java-specifikt, ett bra strukturerat program ska bestå av flera delar som bryter ned problemen i så små delar det bara går och samtidigt vara generellt utfört. Du har t.e.x lagt in console-specifik syntax direkt i klasserna (System.println...) vilket gör det knepigt att porta till exempelvis en applet. En ny variant av t.ex klassen Data skulle kunna se ut så här:

public class Data {

 private String quest;
 private String word;
 private int    points;
 
 	
 public Data(String q,String w,int p)
      {	
         quest    = q;
         word     = w;
         points   = p;        
      }
      
 String  question()
      {
      	return quest;
      } 
 	
 int chAnswer(String a)
      {
 	   if(a.equals(word))
 	       return points;
 	   return 0;
 	  }	
 	
}

Då överlåter man ansvaret för hur datan ska representeras på den klass eller metod som behandlar objektet ... som då kan vara en applet eller vad som helst.

För att sen behandla själva "spelmotorn" kan det vara lättare om man även gör en egen klass av den.. som poängberäkningen, sparandet av highscore m.m...

Men i huvudfilen initierar man datastrukturen och "snackar" med spelmotorn.

while loopen avslutas väl när den har hittad ett slumptal den kan presentera?

Nej, du har ju satt semikolon direkt efter, men ingen "do" innan, så loopen är endast den raden... ;) Generellt sett så skulle det vara bättre om du delade upp alla små varianter i switch-satsen till metoder (kan ligga kvar i huvudfilen - tills vidare) och på så vis fick ned switch-satsens storlek. Då är det lättare att överblicka dina loopar och du får betydligt enklare att själv följa programflödet.

mikael_aMedlem sedan mars 2000502 inlägg
#7

jag har fixat så att frågorna slumpas fram, men nu går det inte att plus ihop poängen...

suck jag har suttit i 5 timmar...

jag försökte att i varje arraty skicka med hur många poäng frågan var värd...
tex:

fråga[1] = new Data("FRÅGAN", "Svars alternativ","Rätt svar","10");

poängen är en int resten är stringar...

sedan i min Data klass tog jag emot datan genom

public Data(String fråga, String val, String svar, int poäng)
{
minFråga = fråga;
mittVal = val;
mittSvar = svar;
minPoäng = poäng;

}

det jag sedan försökte att göra i en setPoäng var att hämta 10 och lägga till den minPoäng om svaret var rätt...

public void setPoäng() //metodnamn

	{
	if (minGissning.compareTo(mittSvar) ==0)
	minPoäng = minPoäng + poäng;

                           System.out.println("\\nR„tt svar! Du har  "+minPoäng+ " poäng");

	}

men nu till problemet... svarar du fel får du 0 poäng svarar du rätt får du 10.... när sedan fråga 2 laddas så skall den ha 20 + 10 om föregående fråga var rätt, men den sätter bara värdet till 20 den tar inte med fråga 1...

mikael_aMedlem sedan mars 2000502 inlägg
#8

koden bifogad...

glömde koden :)

Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb