Just nu i M3-nätverket
Jump to content

Tärning-ett spel


action.exe

Recommended Posts

action.exe

Jag ska göra ett tärningsspel där man ska kasta en tärning valfritt och man ska nå upp till 100 poang och man kan spara poängen, men om man får en etta så blir det 0 poang men man ska kunna spara omgången innan man får en etta och resultatet ska visa hur många kast och omgångar som behövdes för att uppnå 100 poäng. Jag har gjort det halvklart men jag förstår inte hur jag ska spara poängen och visa poängen för det blir hela tiden fel. Några tips hur jag ska lösa spelet?

 

Link to comment
Share on other sites

Kan du kopiera hit just de delar (men inte allt) som gäller det som inte funkar? Annars är det svårt att tala om hur det ska lösas just i ditt fall.

Gäller det C eller C++?

 

Link to comment
Share on other sites

arpavatar

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

 

int main(int argc, char* argv[])

{

int points = 0;

int flings = 0;

int turns = 1;

 

int dice = 0;

char buf[20];

int save[3];

 

srand( (unsigned) time( NULL ) );

 

save[0] = points;

save[1] = flings;

save[2] = turns;

 

while ( points < 100 )

{

printf( "Turn: %d, Points: %d\nThrow/Save/Load/Quit? (t/s/l/q):", turns, points );

scanf( "%s", buf );

switch ( buf[0] )

{

case 'l':

points = save[0];

flings = save[1];

turns = save[2];

continue;

 

case 'q': return 0;

 

case 's':

save[0] = points;

save[1] = flings;

save[2] = turns;

continue;

 

case 't': break;

default: continue;

}

 

flings++;

dice = (rand()%6)+1;

if ( dice == 1 )

{

points = 0;

turns++;

continue;

}

 

points += dice;

}

 

printf( "You have got %d points\nit took %d turns\nand %d tosses of the dice.", points, turns, flings );

return 0;

}

 

 

Link to comment
Share on other sites

Jag brukar göra som så att jag kör igenom koden på papper och ser vad som händer i varje steg. I ditt fall, ha olika kolumner för de olika variablerna och utför de olika raderna i programmet och se vad som händer med variablerna. Det brukar snabbt avslöja eventuella logiska fel.

Du kan börja med att se vad som händer om man bara får upp 6 på tärningen och bara väljer Throw, då ser du ju snabbt om poängen räknas rätt eller inte.

Sedan variera genom att en gång få upp 1 på tärningen eller välja Save/Load.

 

Link to comment
Share on other sites

action.exe

Tack för alla svar. Jag är mycket tacksam. Men jag undrar på den där koden som arpavatar gjorde i c och inte i c++. Jag försökte göra den i c++ istället men får fel. Kan ni kanske hitta vad felet är?

 

 

#include <iostream>

#include <conio.h>

#include <ctime>

 

int main()

{

int points = 0;

int kast = 0;

int turns = 1;

int dice = 0;

char svar[20];

int save[3];

 

srand(time(0));

 

save[0] = points;

save[1] = kast;

save[2] = turns;

 

while( points < 100 )

{

cout << "Turn: " << turns << " Points: " << points;

cout << "\nKasta/Spara/Ladda upp/Quit?(t/s/l/q): ";

cin >> svar;

 

switch( svar[0] )

{

case 'l':

points = save[0];

kast = save[1];

turns = save[2];

continue;

 

case 'q':

return 0;

 

case 's':

save[0] = points;

save[1] = kast;

save[2] = turns;

continue;

 

case 't':

break;

default;

continue;

}

 

kast++;

dice = (rand()%6)+1;

if ( dice == 1 )

{

points = 0;

turns++;

continue;

}

points += dice;

}

 

cout << "Du har fatt " << points << " och det tog " << turns << " rundor " << " och " << kast;

getch();

}

 

Link to comment
Share on other sites

arpavatar

...

case 't':

break;

default; // ska vara ':' efter default..

continue;

}

...

 

...och ska du skriva ett C++ program så är det nog meningen att du skall ha en lite mer objektorienterad lösning... att bara byta ut några IO funktioner tror jag inte räknas som objektorientering...

 

class CDice

{

public:

CDice( ) { srand((unsigned)time(0)); }

int Throw( ) { return (rand()%6)+1; }

};

 

class CPointsMgr

{

public:

CPointsMgr( ) { this->Reset( ); }

~CPointsMgr( ) {}

 

void Update( int value );

 

void Save( );

void Load( );

 

void Reset( );

 

int GetPoints( ) { return m_points[0]; }

int GetTurns( ) { return m_turns[0]; }

int GetThrows( ) { return m_throws[0]; }

 

private:

int m_points[2];

int m_turns[2];

int m_throws[2];

};

 

void CPointsMgr::Reset( )

{

for ( int i=0; i<2; i++ )

{

m_points = 0;

m_throws = 0;

m_turns = 1;

}

}

 

void CPointsMgr::Update( int value )

{

ASSERT( value > 0 && value < 7 );

 

if ( value == 1 )

{

m_points[0] = 0;

m_throws[0]++;

m_turns[0]++;

}

else

{

m_points[0] += value;

m_throws[0]++;

}

}

 

void CPointsMgr::Save( )

{

m_points[1] = m_points[0];

m_throws[1] = m_throws[0];

m_turns[1] = m_turns[0];

}

void CPointsMgr::Load( )

{

m_points[0] = m_points[1];

m_throws[0] = m_throws[1];

m_turns[0] = m_turns[1];

}

 

class CGame

{

public:

CGame( ) {}

~CGame( ) {}

 

bool Play( );

 

private:

CPointsMgr m_pointsMgr;

CDice m_dice;

};

 

bool CGame::Play( )

{

char buf[20];

 

m_pointsMgr.Reset( );

 

while ( m_pointsMgr.GetPoints( ) < 100 )

{

printf( "Turn: %d, Points: %d\nThrow/Save/Load/Quit? (t/s/l/q):", m_pointsMgr.GetTurns( ), m_pointsMgr.GetPoints( ) );

scanf( "%s", buf );

switch ( buf[0] )

{

case 'l':

m_pointsMgr.Load( );

break;

case 'q':

return false;

case 's':

m_pointsMgr.Save( );

break;

case 't':

m_pointsMgr.Update( m_dice.Throw( ) );

break;

default:

break;

}

}

 

printf( "You have got %d points\nit took %d turns\nand %d tosses of the dice.",

m_pointsMgr.GetPoints( ), m_pointsMgr.GetTurns( ), m_pointsMgr.GetThrows( ) );

return true;

}

 

 

int main ( int argc, char* argv[] )

{

CGame game;

 

while ( 1 )

{

if ( game.Play( ) == false )

break;

 

// cout << "Play again?\n";

// if ( no ) -> break...

}

 

return 0;

}

 

 

Link to comment
Share on other sites

action.exe

Men alltså problemet med den koden jag försökte göra var inte default:.

 

Felet var på rad 22 och det klagade på att 'cout' undeclared(first use this function). Vad betyder det?

 

Link to comment
Share on other sites

action.exe

Kan någon hjälpa mig med den koden jag försökte göra? Jag fick fel på rad 22 och det stod: cout 'undeclared(first use this function). Snälla, hjälp mig någon!

 

Link to comment
Share on other sites

lizardKng

Sorry, jag läste lite slarvigt.

 

Byt ut cout mot std::cout ELLER lägg till följande rad efter dina "includes":

 

using namespace std;

 

[inlägget ändrat 2005-05-07 08:26:38 av lizardKng]

Link to comment
Share on other sites

action.exe

Det är lugnt. :)

 

Jag tänkte utveckla det här programmet så användaren kan spela mot datorn.

Spelarna turas om och datorn ges genom koden spelinstruktioner som jag tror kan vara optimala för att lyckas vinna. I dessa instruktioner bör uppnådd omgångspoäng och/eller antalet omgångskast ingå. Spelet ska då avslutas när någon av spelarna uppnår 100 poäng och programmet ska presentera vinnaren, slutställning samt antalet kastomgångar. Hur ska man göra en motståndare?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...