Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <conio.h>
- #include <ctime>
- #include <list>
- #include <fstream>
- using namespace std;
- list<int> listatal;
- list<int>::iterator itp = listatal.begin();
- list<string> listanamn;
- list<string>::iterator it = listanamn.begin();
- int r=1;
- int q=1;
- int vinna();
- int antal=0;
- int slump_ett();
- int spelp1=0, spelp2=0, lika=0;
- void plan();
- void comp();
- void igen();
- void inmat2();
- void skriva();
- void inmat1();
- void mot_dator();
- void spel_typ_1();
- void spel_typ_2();
- void best(string sp, int spp);
- string valmot;
- string spelare1, spelare2;
- char ett='1', tvo='2', tre='3', fyra='4', fem='5', sex='6', sju='7', otta='8', nio='9';
- int main()
- {
- // 3 i rad av Karl Furehed och Viktor Forsberg
- // v1.0 8/4-2009, 12:43, fixat:
- // -klar
- // v1.2 8/4-2009, --:--, fixat:
- // -"Straff"
- // -return inmat(1/2)(spl(1/2))
- // -void igen()
- // -Oavgjort
- // -avbryta vid vinst (EJ färdig)
- // v1.4 17/4-2009, 19:20, fixat:
- // -deklarera utanför funktion
- // -"straff" borta
- // -om fel, samma person igen
- // -avbryta vid vinnst
- // -"scoreboard"
- // -system("cls")
- // v1.4.1 28/9-2009 23:01 fixat:
- // -start varannan gång
- // -strängar ist för char (namn)
- // v1.4.3 9/11-2009, --:-- fixat:
- // -senaste spelet sparas i en fil
- // -fixat lite allmänt,
- // v1.4.5 11/11-2009, --:-- fixat:
- // -skapat en fuktion som gör drag
- // v1.4.7 16/11-2009, fixat:
- // -funktionen som gör drag e fulländad och "smart"
- // v1.4.8 14/12-2009, fixat:
- // -en lista så som behnadlar vínster och inskrivning i fil, fungerar inte riktigt bra
- // -kollar så att filerna; score.txt, bestresult.txt finns på rätt plats
- // i main så väljer man om man vill spela mot en dator eller spelre och vad man spelaren ska heta
- system("color 48");
- system("title Tre i Rad av: Karl Furehed och Viktor Forsberg");
- ifstream test("c:\\score\\score.txt");
- if(!test)
- {
- cout << "Du m\206ste skapa filen: 'score.txt' i mappen: 'c:\\score'" << endl;
- system("pause");
- exit(1);
- }
- test.close();
- ifstream testp("c:\\score\\bestresult.txt");
- if(!testp)
- {
- cout << "Du m\206ste skapa filen: 'bestresult.txt' i mappen: 'c:\\score'" << endl;
- system("pause");
- exit(1);
- }
- test.close();
- system("cls");
- ett='1', tvo='2', tre='3', fyra='4', fem='5', sex='6', sju='7', otta='8', nio='9';
- if(r==1)
- {
- cout << "Vill du spela met en person eller mot en dator?"<<endl;
- cout << " D f\224r dator eller p f\224r person" << endl;
- getline(cin,valmot);
- if(valmot.at(0)=='p' || valmot.at(0)=='P')
- {
- cout << "Spelare 1, mata in ditt namn! (X) : ";
- getline(cin, spelare1);
- cout << "Spelare 2, mata in ditt namn! (O) : ";
- getline(cin,spelare2);
- r++;
- if(antal%2 == 0)
- spel_typ_1();
- else
- spel_typ_2();
- }
- else if(valmot.at(0)=='d' || valmot.at(0)=='D')
- {
- system("cls");
- cout << "Spelare 1, mata in ditt namn! (X) : ";
- getline(cin, spelare1);
- spelare2 = "Dator";
- r++;
- mot_dator();
- }
- else
- main();
- }
- else if(valmot.at(0)=='p' || valmot.at(0)=='P')
- {
- if(antal%2 == 0)
- spel_typ_1();
- else
- spel_typ_2();
- }
- else if(valmot.at(0)=='d' || valmot.at(0)=='D')
- mot_dator();
- else
- main();
- return 0;
- }
- void plan()
- {
- //skriver ut planen som den ser ut under spelet
- cout << "\n --- --- ---" << endl;
- cout << "| " << sju << " | " << otta << " | " << nio << " |" << endl;
- cout << " --- --- ---" << endl;
- cout << "| " << fyra << " | " << fem << " | " << sex << " |" << endl;
- cout << " --- --- ---" << endl;
- cout << "| " << ett << " | " << tvo << " | " << tre << " |" << endl;
- cout << " --- --- ---" << endl;
- }
- void inmat1()
- {
- //inmatning för spelare 1
- int test;
- cout << spelare1 << " (X), din tur att v\204lja: ";
- cin >> test;
- if (test >=1 && test <= 9)
- {
- if (test == 1)
- {
- if (ett=='1')
- ett='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 2)
- {
- if (tvo=='2')
- tvo='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 3)
- {
- if (tre=='3')
- tre='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 4)
- {
- if (fyra=='4')
- fyra='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 5)
- {
- if (fem=='5')
- fem='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 6)
- {
- if (sex=='6')
- sex='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 7)
- {
- if (sju=='7')
- sju='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 8)
- {
- if (otta=='8')
- otta='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- else if (test == 9)
- {
- if (nio=='9')
- nio='X';
- else
- {
- system("cls");
- plan();
- cout << "Den valda rutan \204r upptagen!" << endl;
- inmat1();
- }
- }
- }
- else
- {
- getchar();
- system("cls");
- plan();
- cout << "Fel inmatning!" << endl;
- inmat1();
- }
- }
- void inmat2()
- {
- //inmatning för spelare 2
- int test;
- cout << spelare2 << " (O), din tur att v\204lja: ";
- cin >> test;
- if (test >=1 && test <= 9)
- {
- if (test == 1)
- {
- if (ett=='1')
- ett='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 2)
- {
- if (tvo=='2')
- tvo='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 3)
- {
- if (tre=='3')
- tre='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 4)
- {
- if (fyra=='4')
- fyra='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 5)
- {
- if (fem=='5')
- fem='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 6)
- {
- if (sex=='6')
- sex='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 7)
- {
- if (sju=='7')
- sju='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 8)
- {
- if (otta=='8')
- otta='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- else if (test == 9)
- {
- if (nio=='9')
- nio='O';
- else
- {
- system("cls");
- plan();
- cout << "Den \204r upptagen!" << endl;
- inmat2();
- }
- }
- }
- else
- {
- system("cls");
- plan();
- cout << "Fel inmatning!" << endl;
- inmat2();
- }
- }
- int vinna()
- {
- //"vinna" ser till att om någon för 3-i-rad så avbryts spelet och den spelare som vinnit får ett poäng
- //vågräta "vinster"
- if (ett=='X' && tvo=='X' && tre=='X' || fem=='X' && fyra=='X' && sex=='X' || sju=='X' && otta=='X' && nio=='X')
- {
- system("cls");
- cout << spelare1 << " har vunnit!" << endl;
- plan();
- spelp1++;
- return 1;
- }
- else if (ett=='O' && tvo=='O' && tre=='O' || fem=='O' && fyra=='O' && sex=='O' || sju=='O' && otta=='O' && nio=='O')
- {
- system("cls");
- cout << spelare2 << " har vunnit!" << endl;
- plan();
- spelp2++;
- return 1;
- }
- //kors "vinster"
- else if (ett=='X' && fem=='X' && nio=='X' || tre=='X' && fem=='X' && sju=='X')
- {
- system("cls");
- cout << spelare1 << " har vunnit!" << endl;
- plan();
- spelp1++;
- return 1;
- }
- else if (ett=='O' && fem=='O' && nio=='O' || tre=='O' && fem=='O' && sju=='O')
- {
- system("cls");
- cout << spelare2 << " har vunnit!" << endl;
- plan();
- spelp2++;
- return 1;
- }
- //lodräta "vinster"
- else if (ett=='X' && fyra=='X' && sju=='X' || tvo=='X' && fem=='X' && otta=='X' || tre=='X' && sex=='X' && nio=='X')
- {
- system("cls");
- cout << spelare1 << " har vunnit!" << endl;
- plan();
- spelp1++;
- return 1;
- }
- else if (ett=='O' && fyra=='O' && sju=='O' || tvo=='O' && fem=='O' && otta=='O' || tre=='O' && sex=='O' && nio=='O')
- {
- system("cls");
- cout << spelare2 << " har vunnit!" << endl;
- plan();
- spelp2++;
- return 1;
- }
- else if (ett!='1' && tvo!='2' && tre!='3' && fyra!='4' && fem!='5' && sex!='6' && sju!='7' && otta!='8' && nio!='9')
- {
- system("cls");
- cout << "Oavgjort!" << endl;
- lika++;
- plan();
- return 1;
- }
- else
- return 0;
- }
- void igen()
- {
- // skriver ut hur resultatet ser ut och frågar om man vill köra igen
- // om inte så frågar den om man vill spara resultatet
- string svar;
- cout << "Vill du k\224ra igen?" << endl;
- getline(cin,svar);
- system("cls");
- if (svar.at(0) == 'n')
- {
- string resultat;
- cout << "Programmet kommer nu att avslutas!" << endl << endl;
- cout << "=====Resultat====" << endl;
- cout << spelare1 << ":" << endl << setw(15) << "Vinster: " << spelp1 << endl;
- cout << setw(15) << "F\224rluster: " << spelp2 << endl;
- cout << spelare2 << ":" << endl << setw(15) << "Vinster: " << spelp2 << endl;
- cout << setw(15) << "F\224rluster: " << spelp1 << endl;
- cout << "Lika: " << lika << endl;
- cout << "=================" << endl << endl;
- cout << "Vill du spara resultaten? ";
- getline(cin,resultat);
- if(resultat.at(0) == 'j')
- skriva();
- else if(resultat.at(0) == 'n')
- cout << "Du valde att inte spara!" << endl;
- exit(1);
- }
- else if (svar.at(0) == 'j')
- main();
- else
- {
- cout << "Fel inmatat!" << endl;
- system("cls");
- plan();
- igen();
- }
- }
- void spel_typ_1()
- {
- //spel typ 1, dvs att spelare 1 börjar
- antal++;
- int test=0;
- while (test == 0)
- {
- if (vinna() != 1)
- {
- system("cls");
- plan();
- inmat1();
- if (vinna() == 1)
- {
- test = 1;
- getchar();
- igen();
- }
- }
- if (vinna() != 1)
- {
- system("cls");
- plan();
- inmat2();
- if (vinna() == 1)
- {
- test = 1;
- getchar();
- igen();
- }
- }
- system("cls");
- plan();
- if (vinna() == 1)
- {
- getchar();
- igen();
- }
- }
- }
- void spel_typ_2()
- {
- //spel typ 2, dvs att spelare 2 börjar
- antal++;
- int test=0;
- while (test == 0)
- {
- if (vinna() != 1)
- {
- system("cls");
- plan();
- inmat2();
- if (vinna() == 1)
- {
- test = 1;
- getchar();
- igen();
- }
- }
- if (vinna() != 1)
- {
- system("cls");
- plan();
- inmat1();
- if (vinna() == 1)
- {
- test = 1;
- getchar();
- igen();
- }
- }
- system("cls");
- plan();
- if (vinna() == 1)
- {
- getchar();
- igen();
- }
- }
- }
- void skriva()
- {
- //skriver senaste spelet till filen "score.txt"
- ofstream fin("c:\\score\\score.txt");
- fin << "=============" << endl;
- fin << "Senaste spel:" << endl << endl;
- fin << "==================" << endl;
- fin << spelare1 << ":" << endl << setw(15) << "Vinster: " << spelp1 << endl;
- fin << spelare2 << ":" << endl << setw(15) << "Vinster: " << spelp2 << endl;
- fin << "Lika: " << lika++ << endl;
- fin << "==================";
- fin.close();
- //int result;
- if(spelp1 > spelp2)
- best(spelare1,spelp1);
- else if(spelp2 > spelp1)
- best(spelare2,spelp2);
- }
- void best(string sp, int spp)
- {
- //skriver till fil en highscore lista, vilket just nu de e problem med, vilket ja itne vet va de är
- int i=0,k=0;
- string namn[10];
- int poang[10];
- ifstream fout("c:\\score\\bestresult.txt");
- while(!fout.eof())
- {
- fout >> namn[i];
- listanamn.push_back(namn[i]);
- fout >> poang[i];
- listatal.push_back(poang[i]);
- i++;
- k++;
- }
- i=0;
- fout.close();
- ofstream fin("c:\\score\\bestresult.txt");
- /* Nedan får jag ett problem som jag inte vet hur jag ska lösa, har letat men tycker att
- de borde fungera som de ser ut nu, därför kommer de bli fel när man ska gämföra den senaste
- omgången och dom innnan.*/
- while(i!=k)
- {
- if(*itp < spp)
- {
- fin << sp << ": " << spp << endl;
- }
- else if(*itp > spp)
- {
- fin << *it << ": " << *itp << endl;
- }
- else if(*itp == spp)
- {
- fin << *it << ": " << *itp << endl;
- fin << sp << ": " << spp << endl;
- }
- *itp++;
- i++;
- }
- fin.close();
- /*
- ofstream fin("c:\\score\\bestresult.txt");
- fin << sp << ": " << spp << " vinster" << endl;
- fin.close();
- */
- }
- void comp()
- {
- //en "dator-styrd" spelare med ett automatiskt namn: "Dator", i denna funktion lägger den ut på planen
- int val;
- val = slump_ett();
- //nedan syns offensiva drag som går lodrätt
- if(ett=='O' && fyra=='O' && sju!='X')
- sju='O';
- else if(tvo=='O' && fem=='O' && otta!='X')
- otta='O';
- else if(tre=='O' && sex=='O' && nio!='X')
- nio='O';
- else if(sju=='O' && fyra=='O' && ett!='X')
- ett='O';
- else if(otta=='O' && fem=='O' && tvo!='X')
- tvo='O';
- else if(nio=='O' && sex=='O' && tre!='X')
- tre='O';
- else if(ett=='O' && sju=='O' && fyra!='X')
- fyra='O';
- else if(tvo=='O' &&otta=='O' && fem!='X')
- fem='O';
- else if(tre=='O'&& nio=='O'&& sex!='X')
- sex='O';
- //nedan sysn offensiva drag som går vägrätt
- else if(sju=='O' && otta=='O' && nio!='X')
- nio='O';
- else if(fyra=='O' && fem=='O' && sex!='X')
- sex='O';
- else if(ett=='O' && tvo=='O' && tre!='X')
- tre='O';
- else if(otta=='O' && nio=='O' && sju!='X')
- sju='O';
- else if(sex=='O' && fem=='O' && fyra!='X')
- fyra='O';
- else if(tre=='O' && tvo=='O' && ett!='X')
- ett='O';
- else if(sju=='O' && nio=='O' && otta!='X')
- otta='O';
- else if(fyra=='O' && sex=='O' && fem!='X')
- fem='O';
- else if(ett=='O' && tre=='O' && tvo!='X')
- tvo='O';
- //nedan syns offensiva drag som går korsvis
- else if(sju=='O' && fem=='O' && tre!='X')
- tre='O';
- else if(tre=='O' && fem=='O' && sju!='X')
- sju='O';
- else if(nio=='O' && fem=='O' && ett!='X')
- ett='O';
- else if(ett=='O' && fem=='O' && nio!='X')
- nio='O';
- else if(sju=='O' && tre=='O' && fem!='X')
- fem='O';
- else if(nio=='O' &&ett=='O' && fem!='X')
- fem='O';
- // nedan syns defensiva drag som går lodrätt
- else if(ett=='X' && fyra=='X' && sju!='O')
- sju='O';
- else if(tvo=='X' && fem=='X' && otta!='O')
- otta='O';
- else if(tre=='X' && sex=='X' && nio!='O')
- nio='O';
- else if(sju=='X' && fyra=='X' && ett!='O')
- ett='O';
- else if(otta=='X' && fem=='X' && tvo!='O')
- tvo='O';
- else if(nio=='X' && sex=='X' && tre!='O')
- tre='O';
- else if(ett=='X' && sju=='X' && fyra!='O')
- fyra='O';
- else if(tvo=='X' &&otta=='X' && fem!='O')
- fem='O';
- else if(tre=='X'&& nio=='X'&& sex!='O')
- sex='O';
- //nedan sys defensiva drag som går vågrätt
- else if(sju=='X' && otta=='X' && nio!='O')
- nio='O';
- else if(fyra=='X' && fem=='X' && sex!='O')
- sex='O';
- else if(ett=='X' && tvo=='X' && tre!='O')
- tre='O';
- else if(otta=='X' && nio=='X' && sju!='O')
- sju='O';
- else if(sex=='X' && fem=='X' && fyra!='O')
- fyra='O';
- else if(tre=='X' && tvo=='X' && ett!='O')
- ett='O';
- else if(sju=='X' && nio=='X' && otta!='O')
- otta='O';
- else if(fyra=='X' && sex=='X' && fem!='O')
- fem='O';
- else if(ett=='X' && tre=='X' && tvo!='O')
- tvo='O';
- //nedan syns defensiva drag som går korsvis
- else if(sju=='X' && fem=='X' && tre!='O')
- tre='O';
- else if(tre=='X' && fem=='X' && sju!='O')
- sju='O';
- else if(nio=='X' && fem=='X' && ett!='O')
- ett='O';
- else if(ett=='X' && fem=='X' && nio!='O')
- nio='O';
- else if(sju=='X' && tre=='X' && fem!='O')
- fem='O';
- else if(nio=='X' &&ett=='X' && fem!='O')
- fem='O';
- //om ingen av ovanstående skulle vara logiska
- //så lägger programmet ut en som den tidigare
- //i programmet slumpat fram "slump_ett()"
- else if(val==1 && ett=='1')
- ett='O';
- else if(val==2 && tvo=='2')
- tvo='O';
- else if(val==3 && tre=='3')
- tre='O';
- else if(val==4 && fyra=='4')
- fyra='O';
- else if(val==5 && fem=='5')
- fem='O';
- else if(val==6 && sex=='6')
- sex='O';
- else if(val==7 && sju=='7')
- sju='O';
- else if(val==8 && otta=='8')
- otta='O';
- else if(val==9 && nio=='9')
- nio='O';
- else
- comp();
- }
- int slump_ett()
- {
- //slumpar ett tal mellan 1-9 för att datorn ska kunna lägga en om de inte finns ngt "bra" drag
- srand(time(0));
- for(int i=0;i<1;i++)
- return rand()%9+1;
- }
- void mot_dator()
- {
- //spel typ för spel mot datorn
- antal++;
- int test=0;
- while (test == 0)
- {
- if (vinna() != 1)
- {
- system("cls");
- plan();
- inmat1();
- if (vinna() == 1)
- {
- test = 1;
- getchar();
- igen();
- }
- }
- if (vinna() != 1)
- {
- system("cls");
- plan();
- comp();
- if (vinna() == 1)
- {
- test = 1;
- getchar();
- igen();
- }
- }
- system("cls");
- plan();
- if (vinna() == 1)
- {
- getchar();
- igen();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement