Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


lite problem i en if sats.

Postades av 2005-10-08 19:31:12 - Erik Hallin, i forum c++, Tråden har 11 Kommentarer och lästs av 1022 personer

Jo, jag håller på med ett text spel =)

( ni vet dungeon and warriors?)

Hur som helst är det så att jag är mitt i en if sats, problemet är att den ska leda till at hela programet avslutas.

if (slakta == slakta2)
{
cout << "du valde att slakta dem" << endl;
cout << "inte smart, du har bara knytnavar" << endl;
cout << "" << endl;
cout << " de slaktar dig i stallet" << endl;
cout << "" << endl;
cout << " spelet ar slut, for att avsluta tryck ";
}


så ser det ut för tillfallet i satsen, jag undrar hur jag ska få den att avslutas.
Tacksam för hjälp.


Svara

Sv: lite problem i en if sats.

Postades av 2005-10-08 21:58:28 - Niklas Jansson

Tyvärr ser jag att du nog är ganska fel ute.

Jag kan ju ge ett direkt svar:
Om du skriver direkt i main så kan du avsluta programmet med return.

Men det är inte "rätt" väg att gå.
Kan istället snabbt ge en liten förklaring till hur du hellre löser det:

Hela basen för spelet är en s.k. "game loop". I varje varv i denna loop tar du emot user input och "gör grejer". Du har alltså:

int main()
{
do
gör grejer
str = user input;
while(str != exit)
}

Naturligtvis är det inte så enkelt och så kort, men i princip. Sen får du ha variabler för hur världen ser ut just nu, var man befinner sig, etc. Det är de variablerna du varierar, och sen ger du information (i textform i ditt fall) varje varv i loopen.

Jag kan göra ett mycket kort exempel om en stund om jag orkar.

Du kommer kunna göra ett spel på "ditt" sätt (jag har gjort det själv), men det är nästan omöjligt att utvidga, fruktansvärt svårt att få att bli något vidare intressant, osv. Den varianten jag föreslår är definitivt bättre.


Svara

Sv: lite problem i en if sats.

Postades av 2005-10-08 21:58:57 - Per Persson

Pröva att lägga till <b>exit(0);</b>. Om koden ligger i main kan du även använda <b>return 0;</b>


Svara

Sv:lite problem i en if sats.

Postades av 2005-10-08 22:31:32 - Niklas Jansson

Något sånt här kan man köra med:


class Direction{
public:
  std::string direction;
  operator == (Direction d) {direction == d;}
} ;

class Room{
public:
  std::string desc;
  std::map <Direction, *Room> neighbours;
} ;

int main()
{
  Room StartRoom, BedRoom, LivingRoom, Toilet, Basement;
  Direction up="up", right="right", down="down", left="left", front="front";
  StartRoom.desc  = "You are in the hall. In front of you there's the living room.\n"
  LivingRoom.desc = "You are in the living room. To the front of you there's the bedroom, and to the left there's a toilet.\n"
  BedRoom.desc    = "You are in the bedroom. There is some stairs that are going down.\n"
  Toilet.desc     = "You are in the toilet. Exit is to the right.\n"
  Basement.desc   = "You are in the basement. Exit is up.\n"

  StartRoom.neighbours[front]  = &LivingRoom;
  LivingRoom.neighbours[front] = &Bedroom;
  LivingRoom.neighbours[left]  = &Toilet;
  BedRoom.neighbours[down]     = &Basement;
  Toilet.neighbours[right]     = &LivingRoom;
  Basement.neighbours[up]      = &BedRoom;

  std::string input;
  Room *CurrentRoom = &StartRoom;
  std::cout << "You get into a house\n"
  do{
    std::cout << CurrentRoom->desc;
    std::cin >> input;
    Direction d; d.direction = input;
    if(CurrentRoom->neighbours.find(d) != CurrentRoom->neighbours.end())
        CurrentRoom = CurrentRoom->neighbours[d];
    else
        std::cout << "input error\n"
  }
  while(true)
}


otestad kod, finns inget sätt att avsluta, inga headers är definierade etc.
om det inte funkar - fråga!


Svara

Sv: lite problem i en if sats.

Postades av 2005-10-09 19:07:48 - Erik Hallin

Koden ser då ut såhär. Nu är det ju så att jag är väldigt ny på det här med c++. Kan inte så mycket.

#include <iostream>

#include <iomanip>
using namespace std;
main()
{
int dorr_1 = 1, dorr_2 = 2;
int drake = 2, vapen = 1;
int start = 1, the_beggining = 1, history = 2, slakta = 3, fly = 4, fly2 = 4, slakta2 = 3, forsatt = 5;

cout << ""; cout << "^DARK CHEAST OF WONDERS^" << endl;
cout << "======================" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "start" << endl;
cout << "" << endl;
cout << "press one^"; cin >> start;
cout << " Why does he travel to the darkes place on earth?" << endl;
cout << "" << endl;
cout << "Cause he can.. =O" << endl;
cout << "==================================================================" << endl;
cout << "|" << endl; cout << "Name: SAM" << endl; cout << "|" << endl;
cout << "|" << endl; cout << "Life: 100 liv" << endl; cout << "|" << endl;
cout << "|" << endl; cout << "Function: killing machine" << endl;cout << "|" << endl;
cout << "==================================================================" << endl;
if (start == the_beggining)
{
cout << "slottet ar framfor dig" << endl;
cout << "" << endl;
cout << " du moter 3 ackliga forvuxna gnagare, varje gnagare har 30 liv!" << endl;
cout << "" << endl;
cout << "vill du doda dem? i sa fall tryck 4" << endl;
cout << "" << endl;
cout << "vill du fly tryck 3"; cin >> fly;
cout << "====================" << endl;

}
if (slakta < fly)
{
cout << "du valde att slakta dem" << endl;
cout << "inte smart, du har bara knytnavar" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << " de slaktar dig i stallet" << endl
cout << "" << endl;
} <------------------------------Här är det tänkt att de ska ta stopp.Om man valde fel.
else
{
cout << "du valde att fly" << endl;
cout << "" << endl;
cout << "smart du hade namligen bara knytnavar =D" << endl;
cout << "" << endl;
cout << "du forsatter nu" << endl;
cout << "==================" << endl;
}
cout << "vill du forsatta? tryck i så fall 5"; cin >> forsatt;
cout << "===================================" << endl;
cout << "du har gatt in igenom en dorr vid slottet och gar ner for en trappa" << endl;
cout << "" << endl;
cout << "" << endl;

cout << "du ser tre dorrar, vilken dorr vill du oppna?" << endl;
cout << "" << endl;
cout << "" << endl;

cout << " forsta dorren har numer 1, om du vill oppna den tryck 1" << endl;
cout << "" << endl;
cout << "" << endl;

cout << "den andra har numer 2, om du vill oppna den tryck 2" << endl;

cout << "valj dorr"; cin >> dorr_1;
cout << "====================================================" << endl;

if (dorr_1 == vapen)
{

cout << "du hittar ett vapen... vapnet skadar 15liv per skott" << endl;
cout << " du stoppar ner vapnet forsiktigt i ditt holster" << endl;
cout << "" << endl;
cout << "du foljer nu korridoren som dok upp nar du gick in igenom dorren och hittade vapnet" << endl;

}
else if (dorr_2 == drake)

cout << "..du moter en elak drake som ater upp dig. Du har nu mott resans slut." << endl;





system ("PAUSE");
return 0;
}


Svara

Sv:lite problem i en if sats.

Postades av 2005-10-09 20:56:50 - Niklas Jansson

Öh... jaha?

Du har redan fått två svar. Om du vill avbryta där så är det korta svaret att du använder return 0 eller exit(0).


Men det är ändå fel väg att gå, din kod är helsnurrig. Du kommer tröttna på att mecka med den typen av kodande, jag lovar.

Gör istället så som jag skriver ovan, eller åtminstone något i den stilen.
Alltså:
1. Ha ett "tillstånd".
2. Ha en loop där du gör tre saker:
-Presenterar nuvarande tillstånd
-Tar emot någon slags input från användaren
-Modifierar tillståndet eller avslutar programmet.

Det är nästan det enda sättet som i praktiken funkar.


Svara

Sv:lite problem i en if sats.

Postades av 2005-10-14 23:25:18 - Peter Larsson

Som Niklas säger, din kod är helsnurrig men för att ge dig svar på frågan så kan du lägga till en return-sats där du vill att programmet ska avslutas. Så här:

if (slakta < fly)
{
cout << "du valde att slakta dem" << endl;
cout << "inte smart, du har bara knytnavar" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << " de slaktar dig i stallet" << endl
cout << "" << endl;
return 0; // nu kommer programmet avslutas
}

/Peter


Svara

Sv: lite problem i en if sats.

Postades av 2005-10-17 18:59:05 - Erik Hallin

Mm jag fattade efter ett tag efter jag skickade in det inlägget.

Men det är så att jag inte riktigt förstår din kod. Som sagt jag är nybörjare när det gäller C++.

Det här var mer som ett test, personligen tycker jag att det är rätt störande när inte ens ett test funkar.

Så jag tänkte skicka min kod så du fick se hur jag gjorde, och därmed kanske du skulle se att jag inte är så speciellt bra...


Svara

Sv:lite problem i en if sats.

Postades av 2005-10-17 20:29:52 - Niklas Jansson

Problemet är att när du vill göra den typen av spel som du försöker göra så måste man nästan göra på det sättet jag beskriver, annars är det mycket svårt att hantera.

Jag skulle föreslå att du:
1. Frågar mer om strukturen, alltså "hur bör jag göra för att skriva ett spel som ...". Och det fick du svar på ovan. Utgå från det, och skriv programmet "i stort". Gå sen ner mer och mer i detalj, tills du får spelet att funka. Får du problem så fråga om de grejerna.

eller

2. Ge dig på andra delar först, och läs mer av andras kod. Se till att ordentligt veta vad det finns för typer i standard C++; int, double, bool, std::string, std::map, std::vector. Se till att ordentligt kunna alla kontrollstrukturer (for, while, if). Se till att förstå funktioner och hur de i princip ska fungera. Försök förstå structar och classer. Lär dig om objektorientering. Sen kommer du efter hand förstå dig på hur du borde skrivit spelet.

Några tips om du ändå försöker fortsätta med spelet:
Alla variabler ska beskriva något. Har du en Ja/Nej-fråga, så är det en bool-variabel. Har du en fråga om antal så är det en int- eller double-variabel. Programmet ska styras utifrån vad variablerna ska beskriva.


Svara

Sv: lite problem i en if sats.

Postades av 2005-10-18 18:27:19 - Erik Hallin

Ok, tack för hjälpen. Fast jag har en liten fråga till. Jag lär mig u boken C++ direkt av Jan Skansholm.
I den boken nämner han inget om std::map och sådant. Jag kanske jag har fel bok om jag vill lära mig C++?
Om så, vilken ska jag läsa?


Svara

Sv:lite problem i en if sats.

Postades av 2005-10-18 18:54:47 - Niklas Jansson

Boken är hyfsad, även om han snurrar ihop lite begrepp (inget allvarligt dock).

Börja med den, följ övningarna, läs igenom rubbet. Sen tror jag att både map, string, set, osv. är med där.
Du kommer iaf få en introduktion till OO, och då kan du enkelt använda det för att strukturera upp programmet mycket bättre.

Leta sen efter Scott Meyers böcker "Effective C++", "More Effective C++" , och (om jag inte minns fel) "Effective STL".

Där lär du dig verkligen hur du ska använda språket på rätt sätt.


Svara

Sv: lite problem i en if sats.

Postades av 2005-10-26 18:30:03 - Erik Hallin

Ok tack så mycket för hjälpen :)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 617
27 953
271 709
5 730
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies