diff options
Diffstat (limited to 'Bachelor/Prog1/Prakt6/prg1p6_2')
| -rw-r--r-- | Bachelor/Prog1/Prakt6/prg1p6_2/main.cpp | 15 | ||||
| -rw-r--r-- | Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsp | 108 | ||||
| -rw-r--r-- | Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsw | 29 | ||||
| -rw-r--r-- | Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.cpp | 385 | ||||
| -rw-r--r-- | Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.h | 36 |
5 files changed, 573 insertions, 0 deletions
diff --git a/Bachelor/Prog1/Prakt6/prg1p6_2/main.cpp b/Bachelor/Prog1/Prakt6/prg1p6_2/main.cpp new file mode 100644 index 0000000..79ab352 --- /dev/null +++ b/Bachelor/Prog1/Prakt6/prg1p6_2/main.cpp @@ -0,0 +1,15 @@ +// Programmieren 1, Praktikum 6, Aufgabe 1
+// Author: Sven Eisenhauer
+// Date: 14.01.2005
+// File: main.cpp
+// Description: Application for class TicTacToe
+
+#include "tictactoe.h"
+
+int main()
+{
+ TicTacToe game;
+ game.playOneGame();
+
+ return 0;
+}
\ No newline at end of file diff --git a/Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsp b/Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsp new file mode 100644 index 0000000..3a9b49a --- /dev/null +++ b/Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsp @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="prg1p6_2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=prg1p6_2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "prg1p6_2.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "prg1p6_2.mak" CFG="prg1p6_2 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "prg1p6_2 - Win32 Release" (basierend auf "Win32 (x86) Console Application")
+!MESSAGE "prg1p6_2 - Win32 Debug" (basierend auf "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "prg1p6_2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "prg1p6_2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "prg1p6_2 - Win32 Release"
+# Name "prg1p6_2 - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\tictactoe.cpp
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\tictactoe.h
+# End Source File
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsw b/Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsw new file mode 100644 index 0000000..3b81189 --- /dev/null +++ b/Bachelor/Prog1/Prakt6/prg1p6_2/prg1p6_2.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "prg1p6_2"=.\prg1p6_2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.cpp b/Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.cpp new file mode 100644 index 0000000..0b9693d --- /dev/null +++ b/Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.cpp @@ -0,0 +1,385 @@ +// Programmieren 1, Praktikum 6, Aufgabe 1
+// Author: Sven Eisenhauer
+// Date: 14.01.2005
+// File: tictactoe.cpp
+// Description: Implementation of class TicTacToe
+
+#include "tictactoe.h"
+#include <cstdlib>
+#include <ctime>
+#include <iostream>
+using std::cout;
+using std::endl;
+using std::cin;
+
+TicTacToe::TicTacToe()
+:nrFields(9)
+{
+ for (int i=0;i<nrFields;i++)
+ field[i]=static_cast <char> (i+49);
+ winner="";
+ round=0;
+}
+
+TicTacToe::~TicTacToe()
+{
+ cout << endl << "Game Over!" << endl;
+}
+
+void TicTacToe::eraseField()
+{
+ for (int i=0;i<nrFields;i++)
+ field[i]=' ';
+}
+
+void TicTacToe::playOneGame()
+{
+ srand(time(0));
+ welcome();
+ print();
+ eraseField();
+ setBeginner();
+ print();
+ while (""==getWinner())
+ {
+ if("Player" == getNext())
+ {
+ movePlayer();
+ }
+ else
+ {
+ moveComputer();
+
+ }
+ print();
+ setWinner();
+ }
+ printWinner();
+}
+
+void TicTacToe::print()
+{
+
+ cout << endl;
+ for (int i=0;i<nrFields;i+=3)
+ {
+ cout << field[i] << " | "<< field[i+1]<< " | "<< field[i+2]<<endl;
+ if (i<6)
+ {
+ for (int n=0;n<10;n++)
+ cout << "-";
+ cout << endl;
+ }
+ }
+ cout << endl;
+}
+
+void TicTacToe::welcome()
+{
+ cout << endl << "TicTacToe!" << endl <<
+ "To mark a field, just enter the according number ('1' means field one)!" << endl;
+}
+
+void TicTacToe::setWinner()
+{
+ int n=0;
+
+ while (n<7 && ""==getWinner())
+ {
+ if (0==(n%3))
+ {
+ if (field[n]=='X' &&field[n+1]=='X' &&field[n+2]=='X')
+ winner="Player";
+ if (field[n]=='O' &&field[n+1]=='O' &&field[n+2]=='O')
+ winner="Computer";
+ }
+ if (n<=2)
+ {
+ if (field[n]=='X' &&field[n+3]=='X' &&field[n+6]=='X')
+ winner="Player";
+ if (field[n]=='O' &&field[n+3]=='O' &&field[n+6]=='O')
+ winner="Computer";
+ }
+ if (n==0)
+ {
+ if (field[n]=='X' &&field[n+4]=='X' &&field[n+8]=='X')
+ winner="Player";
+ if (field[n]=='O' &&field[n+4]=='O' &&field[n+8]=='O')
+ winner="Computer";
+ }
+ if (n==2)
+ {
+ if (field[n]=='X' &&field[n+2]=='X' &&field[n+4]=='X')
+ winner="Player";
+ if (field[n]=='O' &&field[n+2]=='O' &&field[n+4]=='O')
+ winner="Computer";
+ }
+ n++;
+ }
+ if (round==nrFields && getWinner()=="")
+ {
+ winner="Draw";
+ }
+}
+
+void TicTacToe::setBeginner()
+{
+ char input;
+ cout << endl << "Who has first move?" << endl
+ << "[P]layer or [C]omputer: ";
+ do
+ {
+ cin >> input;
+ switch (input)
+ {
+ case 'p':
+ case 'P':
+ nextPlayer="Player";
+ break;
+ case 'c':
+ case 'C':
+ nextPlayer="Computer";
+ break;
+ default:
+ cout << endl << "Bad selection! Enter new selection: ";
+ }
+ } while (input!='P' && input!='C' && input!='p' && input!='c');
+}
+void TicTacToe::movePlayer()
+{
+ int draw=0;
+ cout << endl << "Enter your move: ";
+ //print();
+ cin >> draw;
+ while (testField(draw-1))
+ {
+ cout << endl << "Irregular move... please enter a new one" << endl;
+ cin >> draw;
+ }
+ field[draw-1]='X';
+ setNext("Computer");
+ round++;
+}
+
+int TicTacToe::testField(int f)
+{
+ if (field[f]==' ')
+ return 0;
+ else
+ return 1;
+}
+
+void TicTacToe::moveComputer()
+{
+ int move=4;
+ int vertX[3]={0};
+ int horX[3]={0};
+ int diagX[2]={0};
+ int vertO[3]={0};
+ int horO[3]={0};
+ int diagO[2]={0};
+ int n=0,
+ x=0,
+ y=0,
+ d=0;
+
+ if (testField(move))
+ {
+ while(testField(n) && n<nrFields)
+ {
+ n+=2;
+ }
+ move=n;
+ }
+
+ if (testField(move))
+ {
+ n=1;
+ while(testField(n) && n<nrFields)
+ {
+ n+=2;
+ }
+ move=n;
+ }
+
+ //defense
+ for (n=0;n<3;n++)
+ if (field[n]=='X')
+ vertX[0]++;
+ for (n=3;n<6;n++)
+ if (field[n]=='X')
+ vertX[1]++;
+ for (n=6;n<9;n++)
+ if (field[n]=='X')
+ vertX[2]++;
+
+ for (n=0;n<=6;n+=3)
+ if (field[n]=='X')
+ horX[0]++;
+ for (n=1;n<=7;n+=3)
+ if (field[n]=='X')
+ horX[1]++;
+ for (n=2;n<=8;n+=3)
+ if (field[n]=='X')
+ horX[2]++;
+
+ for (n=0;n<=8;n+=4)
+ if (field[n]=='X')
+ diagX[0]++;
+ for (n=2;n<=6;n+=2)
+ if (field[n]=='X')
+ diagX[1]++;
+
+ // offense
+
+ for (n=0;n<3;n++)
+ if (field[n]=='O')
+ vertO[0]++;
+ for (n=3;n<6;n++)
+ if (field[n]=='O')
+ vertO[1]++;
+ for (n=6;n<9;n++)
+ if (field[n]=='O')
+ vertO[2]++;
+
+ for (n=0;n<=6;n+=3)
+ if (field[n]=='O')
+ horO[0]++;
+ for (n=1;n<=7;n+=3)
+ if (field[n]=='O')
+ horO[1]++;
+ for (n=2;n<=8;n+=3)
+ if (field[n]=='O')
+ horO[2]++;
+
+ for (n=0;n<=8;n+=4)
+ if (field[n]=='O')
+ diagO[0]++;
+ for (n=2;n<=6;n+=2)
+ if (field[n]=='O')
+ diagO[1]++;
+
+
+ for (n=0;n<3;n++)
+ if (vertX[n]==2 && vertO[n]==0)
+ {
+ switch(n) {
+ case 0: x=n;
+ while (testField(x) && x<nrFields)
+ x++;
+ break;
+ case 1: x=n+2;
+ while (testField(x) && x<nrFields)
+ x++;
+ break;
+ case 2: x=n+5;
+ while (testField(x) && x<nrFields)
+ x++;
+ break;
+ }
+ move=x;
+ }
+ for (n=0;n<3;n++)
+ if (horX[n]==2 && horO[n]==0)
+ {
+ switch(n) {
+ case 0: y=n;
+ while (testField(y)&& y<nrFields)
+ y+=3;
+ break;
+ case 1: y=n;
+ while (testField(y)&& y<nrFields)
+ y+=3;
+ break;
+ case 2: y=n;
+ while (testField(y)&& y<nrFields)
+ y+=3;
+ break;
+ }
+ move=y;
+ }
+ for (n=0;n<2;n++)
+ if (diagX[n]==2 && diagO[n]==0)
+ {
+ switch(n) {
+ case 0: d=n;
+ while (testField(d)&& d<nrFields)
+ d+=4;
+ break;
+ case 1: d=2;
+ while (testField(d)&& d<nrFields)
+ d+=2;
+ break;
+ }
+ move=d;
+ }
+ for (n=0;n<3;n++)
+ if (vertO[n]==2 && vertX[n]==0)
+ {
+ switch(n) {
+ case 0: x=n;
+ while (testField(x) && x<nrFields)
+ x++;
+ break;
+ case 1: x=n+2;
+ while (testField(x) && x<nrFields)
+ x++;
+ break;
+ case 2: x=n+5;
+ while (testField(x) && x<nrFields)
+ x++;
+ break;
+ }
+ move=x;
+ }
+ for (n=0;n<3;n++)
+ if (horO[n]==2 && horX[n]==0)
+ {
+ switch(n) {
+ case 0: y=n;
+ while (testField(y)&& y<nrFields)
+ y+=3;
+ break;
+ case 1: y=n;
+ while (testField(y)&& y<nrFields)
+ y+=3;
+ break;
+ case 2: y=n;
+ while (testField(y)&& y<nrFields)
+ y+=3;
+ break;
+ }
+ move=y;
+ }
+ for (n=0;n<2;n++)
+ if (diagO[n]==2 && diagX[n]==0)
+ {
+ switch(n) {
+ case 0: d=n;
+ while (testField(d)&& d<nrFields)
+ d+=4;
+ break;
+ case 1: d=2;
+ while (testField(d)&& d<nrFields)
+ d+=2;
+ break;
+ }
+ move=d;
+ }
+
+ cout << endl << "Computer moves: ";
+ field[move]='O';
+ //print();
+ setNext("Player");
+ round++;
+}
+
+void TicTacToe::printWinner()
+{
+ system("cls");
+ if (getWinner()!="Draw")
+ cout << getWinner() << " won the match!" << endl;
+ else
+ cout << "Draw Game, no winner!" << endl;
+ print();
+}
\ No newline at end of file diff --git a/Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.h b/Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.h new file mode 100644 index 0000000..27929e8 --- /dev/null +++ b/Bachelor/Prog1/Prakt6/prg1p6_2/tictactoe.h @@ -0,0 +1,36 @@ +// Programmieren 1, Praktikum 6, Aufgabe 1
+// Author: Sven Eisenhauer
+// Date: 14.01.2005
+// File: tictactoe.h
+// Description: class TicTacToe
+
+#ifndef TICTACTOE_1
+#define TICTACTOE_1
+
+class TicTacToe
+{
+public:
+ TicTacToe();
+ ~TicTacToe();
+ void playOneGame();
+private:
+ char field[9];
+ const int nrFields;
+ int round;
+ char *nextPlayer;
+ char *winner;
+ void print();
+ void printWinner();
+ void welcome();
+ void setNext(char *n) {nextPlayer=n;}
+ void setBeginner();
+ void setWinner();
+ char * getNext() {return nextPlayer;}
+ char * getWinner() {return winner;}
+ void movePlayer();
+ void moveComputer();
+ void eraseField();
+ int testField(int);
+};
+
+#endif
\ No newline at end of file |
