Lost Password?


Go Back   CodeCall Programming Forum > Software Development > C and C++

C and C++ C and C++ forum for discussing all forms of C except for C#. These languages are powerful low level languages used for creating Operating Systems, Device Drivers, compilers and much more.

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 08-16-2007, 09:22 AM
Zunone Zunone is offline
Newbie
 
Join Date: Aug 2007
Posts: 2
Rep Power: 0
Zunone is on a distinguished road
Default A simple TicTacToe game

Hey, so now, that I started learning C++ I figured I could do a Tic Tac Toe game. So this is my code (i'm a newbie so be harsh on me):

Code:
// Krizec Krozec (c) Zunone, 2007

#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;
// Konstante spreminjanjoce se mreze in char array le te
const int S_MREZA = 3;
char mreza[S_MREZA][S_MREZA] = { {' ',' ',' ',},
												{' ',' ',' ',},
													{' ',' ',' ',} };
// Konstante oblike mreze
const int O_MREZA = 7;

//Prva poteza
bool prvaPoteza;

// Izris mreze za igranje
string izris() {
	string sMreza = "";
	// For loop za izris preproste mreze
	for (int i = 0;i < O_MREZA;i++) 
	{
		if (i == 0)
			sMreza = sMreza + "   0 1 2\n  -------\n";
		if (i == (O_MREZA - 1) ||i == 2 || i == 4)
			sMreza = sMreza + "  -------\n";
		if (i == 1)
			sMreza = sMreza + "0" + " |" + mreza[0][0] + "|" + mreza[0][1] + "|" + mreza[0][2] + "|\n";
		if (i == 3)
			sMreza = sMreza + "1" + " |" + mreza[1][0] + "|" + mreza[1][1] + "|" + mreza[1][2] + "|\n";
		if (i == 5)
			sMreza = sMreza + "2" + " |" + mreza[2][0] + "|" + mreza[2][1] + "|" + mreza[2][2] + "|\n";
	}
	return sMreza;
}
// Funkcija s katero preverjamo zmago
int preveriZmago() {
	//-------------------------X-----------------------------
	// Kombinacije, ki so mozne za navpicno zmago.
	if (mreza[0][0] == 'X' && mreza[0][1] == 'X' && mreza[0][2] == 'X')
		return 37;
	if (mreza[1][0] == 'X' && mreza[1][1] == 'X' && mreza[1][2] == 'X')
		return 37;
	if (mreza[2][0] == 'X' && mreza[2][1] == 'X' && mreza[2][2] == 'X')
		return 37;
	// Kombinacije, ki so mozne za vodoravno zmago
	if (mreza[0][0] == 'X' && mreza[1][0] == 'X' && mreza[2][0] == 'X')
		return 37;
	if (mreza[0][1] == 'X' && mreza[1][1] == 'X' && mreza[2][1] == 'X')
		return 37;
	if (mreza[0][2] == 'X' && mreza[1][2] == 'X' && mreza[2][2] == 'X')
		return 37;
	// Kombinacije, ki so mozne za krizno zmago
	if (mreza[0][0] == 'X' && mreza[1][1] == 'X' && mreza[2][2] == 'X')
		return 37;
	if (mreza[2][0] == 'X' && mreza[1][1] == 'X' && mreza[0][2] == 'X')
		return 37;
	//-------------------------O-----------------------------
	// Kombinacije, ki so mozne za navpicno zmago.
	if (mreza[0][0] == 'O' && mreza[0][1] == 'O' && mreza[0][2] == 'O')
		return 5;
	if (mreza[1][0] == 'O' && mreza[1][1] == 'O' && mreza[1][2] == 'O')
		return 5;
	if (mreza[2][0] == 'O' && mreza[2][1] == 'O' && mreza[2][2] == 'O')
		return 5;
	// Kombinacije, ki so mozne za vodoravno zmago
	if (mreza[0][0] == 'O' && mreza[1][0] == 'O' && mreza[2][0] == 'O')
		return 5;
	if (mreza[0][1] == 'O' && mreza[1][1] == 'O' && mreza[2][1] == 'O')
		return 5;
	if (mreza[0][2] == 'O' && mreza[1][2] == 'O' && mreza[2][2] == 'O')
		return 5;
	// Kombinacije, ki so mozne za krizno zmago
	if (mreza[0][0] == 'O' && mreza[1][1] == 'O' && mreza[2][2] == 'O')
		return 5;
	if (mreza[2][0] == 'O' && mreza[1][1] == 'O' && mreza[0][2] == 'O')
		return 5;
	return 8;
}
// Reset funkcija za resetiranje mreze (priprava na novo igro)
void reset() {
	for (int i = 0;i < S_MREZA;i++)
	{
		for (int j = 0; j < S_MREZA;j++)
		{
			mreza[i][j] = ' ';
		}
	}
	system("cls");
}
// Funkcija, ki preverja, ce je rezultat neodlocen
bool neodloceno() {
	int rowr = 0;
	for (int i = 0;i < S_MREZA;i++)
	{
		for (int j = 0; j < S_MREZA;j++)
		{
			if (mreza[i][j] != ' ')
				rowr++;
		}
	}
	if (rowr == 9) 
		return true;
	return false;
}
// Koliko dolgo bo racunalnik razmisljal
void razmisljaj(unsigned int sec)
{
    clock_t cilj = (sec*1000) + clock();
    while (cilj > clock());
}

// Funkcija s katero racunalnik ovrednoti poteze
int racOvrednoti() {
	//1. Prva poteza
	if (prvaPoteza) {
		srand(time(0));
		int randNum = (rand() % 5);
		switch (randNum) {
			case 0:
				if (mreza[1][1] == ' ') {
					mreza[1][1] = 'O';
					return 0;
				}
			case 1:
				if (mreza[0][0] == ' ') {
					mreza[0][0] = 'O';
					return 0;
				}
			case 2:
				if (mreza[2][2] == ' ') {
					mreza[2][2] = 'O';
					return 0;
				}
			case 3:
				if (mreza[0][2] == ' ') {
					mreza[0][2] = 'O';
					return 0;
				}
			case 4:
				if (mreza[2][0] == ' ') {
					mreza[2][0] = 'O';
					return 0;
				}
		}
		return 0;
	}
	//24 napadalnih potez
	// Vodoravno
	if (mreza[0][0] == 'O' && mreza[0][1] == 'O' && mreza[0][2] == ' ')
		mreza[0][2] = 'O';
	else if (mreza[0][0] == 'O' && mreza[0][1] == ' ' && mreza[0][2] == 'O')
		mreza[0][1] = 'O';
	else if (mreza[0][0] == ' ' && mreza[0][1] == 'O' && mreza[0][2] == 'O')
		mreza[0][0] = 'O';
	else if (mreza[1][0] == 'O' && mreza[1][1] == ' ' && mreza[1][2] == 'O')
		mreza[1][1] = 'O';
	else if (mreza[1][0] == 'O' && mreza[1][1] == 'O' && mreza[1][2] == ' ')
		mreza[1][2] = 'O';
	else if (mreza[1][0] == ' ' && mreza[1][1] == 'O' && mreza[1][2] == 'O')
		mreza[1][0] = 'O';
	else if (mreza[2][0] == ' ' && mreza[2][1] == 'O' && mreza[2][2] == 'O')
		mreza[2][0] = 'O';
	else if (mreza[2][0] == 'O' && mreza[2][1] == ' ' && mreza[2][2] == 'O')
		mreza[2][1] = 'O';
	else if (mreza[2][0] == 'O' && mreza[2][1] == 'O' && mreza[2][2] == ' ')
		mreza[2][2] = 'O';
	// Navpicno
	else if (mreza[0][0] == 'O' && mreza[1][0] == ' ' && mreza[2][0] == 'O')
		mreza[1][0] = 'O';
	else if (mreza[0][0] == 'O' && mreza[1][0] == 'O' && mreza[2][0] == ' ')
		mreza[2][0] = 'O';
	else if (mreza[0][0] == ' ' && mreza[1][0] == 'O' && mreza[2][0] == 'O')
		mreza[0][0] = 'O';
	else if (mreza[0][1] == 'O' && mreza[1][1] == ' ' && mreza[2][1] == 'O')
		mreza[1][1] = 'O';
	else if (mreza[0][1] == ' ' && mreza[1][1] == 'O' && mreza[2][1] == 'O')
		mreza[0][1] = 'O';
	else if (mreza[0][1] == 'O' && mreza[1][1] == 'O' && mreza[2][1] == ' ')
		mreza[2][1] = 'O';
	else if (mreza[0][2] == 'O' && mreza[1][2] == 'O' && mreza[2][2] == ' ')
		mreza[2][2] = 'O';
	else if (mreza[0][2] == 'O' && mreza[1][2] == ' ' && mreza[2][2] == 'O')
		mreza[1][2] = 'O';
	else if (mreza[0][2] == ' ' && mreza[1][2] == 'O' && mreza[2][2] == 'O')
		mreza[0][2] = 'O';
	//Krizno
	else if (mreza[0][0] == ' ' && mreza[1][1] == 'O' && mreza[2][2] == 'O')
		mreza[0][0] = 'O';
	else if (mreza[0][0] == 'O' && mreza[1][1] == ' ' && mreza[2][2] == 'O')
		mreza[1][1] = 'O';
	else if (mreza[0][0] == 'O' && mreza[1][1] == 'O' && mreza[2][2] == ' ')
		mreza[2][2] = 'O';
	else if (mreza[2][0] == ' ' && mreza[1][1] == 'O' && mreza[0][2] == 'O')
		mreza[2][0] = 'O';
	else if (mreza[2][0] == 'O' && mreza[1][1] == ' ' && mreza[0][2] == 'O')
		mreza[1][1] = 'O';
	else if (mreza[2][0] == 'O' && mreza[1][1] == 'O' && mreza[0][2] == ' ')
		mreza[0][2] = 'O';
	//24 obrambnih potez
	// Vodoravno
	else if (mreza[0][0] == 'X' && mreza[0][1] == 'X' && mreza[0][2] == ' ')
		mreza[0][2] = 'O';
	else if (mreza[0][0] == 'X' && mreza[0][1] == ' ' && mreza[0][2] == 'X')
		mreza[0][1] = 'O';
	else if (mreza[0][0] == ' ' && mreza[0][1] == 'X' && mreza[0][2] == 'X')
		mreza[0][0] = 'O';
	else if (mreza[1][0] == 'X' && mreza[1][1] == ' ' && mreza[1][2] == 'X')
		mreza[1][1] = 'O';
	else if (mreza[1][0] == 'X' && mreza[1][1] == 'X' && mreza[1][2] == ' ')
		mreza[1][2] = 'O';
	else if (mreza[1][0] == ' ' && mreza[1][1] == 'X' && mreza[1][2] == 'X')
		mreza[1][0] = 'O';
	else if (mreza[2][0] == ' ' && mreza[2][1] == 'X' && mreza[2][2] == 'X')
		mreza[2][0] = 'O';
	else if (mreza[2][0] == 'X' && mreza[2][1] == ' ' && mreza[2][2] == 'X')
		mreza[2][1] = 'O';
	else if (mreza[2][0] == 'X' && mreza[2][1] == 'X' && mreza[2][2] == ' ')
		mreza[2][2] = 'O';
	// Navpicno
	else if (mreza[0][0] == 'X' && mreza[1][0] == ' ' && mreza[2][0] == 'X')
		mreza[1][0] = 'O';
	else if (mreza[0][0] == 'X' && mreza[1][0] == 'X' && mreza[2][0] == ' ')
		mreza[2][0] = 'O';
	else if (mreza[0][0] == ' ' && mreza[1][0] == 'X' && mreza[2][0] == 'X')
		mreza[0][0] = 'O';
	else if (mreza[0][1] == 'X' && mreza[1][1] == ' ' && mreza[2][1] == 'X')
		mreza[1][1] = 'O';
	else if (mreza[0][1] == ' ' && mreza[1][1] == 'X' && mreza[2][1] == 'X')
		mreza[0][1] = 'O';
	else if (mreza[0][1] == 'X' && mreza[1][1] == 'X' && mreza[2][1] == ' ')
		mreza[2][1] = 'O';
	else if (mreza[0][2] == 'X' && mreza[1][2] == 'X' && mreza[2][2] == ' ')
		mreza[2][2] = 'O';
	else if (mreza[0][2] == 'X' && mreza[1][2] == ' ' && mreza[2][2] == 'X')
		mreza[1][2] = 'O';
	else if (mreza[0][2] == ' ' && mreza[1][2] == 'X' && mreza[2][2] == 'X')
		mreza[0][2] = 'O';
	//Krizno
	else if (mreza[0][0] == ' ' && mreza[1][1] == 'X' && mreza[2][2] == 'X')
		mreza[0][0] = 'O';
	else if (mreza[0][0] == 'X' && mreza[1][1] == ' ' && mreza[2][2] == 'X')
		mreza[1][1] = 'O';
	else if (mreza[0][0] == 'X' && mreza[1][1] == 'X' && mreza[2][2] == ' ')
		mreza[2][2] = 'O';
	else if (mreza[2][0] == ' ' && mreza[1][1] == 'X' && mreza[0][2] == 'X')
		mreza[2][0] = 'O';
	else if (mreza[2][0] == 'X' && mreza[1][1] == ' ' && mreza[0][2] == 'X')
		mreza[1][1] = 'O';
	else if (mreza[2][0] == 'X' && mreza[1][1] == 'X' && mreza[0][2] == ' ')
		mreza[0][2] = 'O';
	else {
		for (int i = 0; i < 3; i++){
			for (int j = 0; j < 3; j++) {
				if (i == 0 && j == 0) {	
					if (mreza[i][j] == ' ' && mreza[i+1][j+1] == 'O') {
						mreza[i][j] = 'O';
						return 0;
					}
					if (mreza[i][j] == 'O' && mreza[i+1][j+1] == ' ') {
						mreza[i+1][j+1] = 'O';
						return 0;
					}
				}
				if (i == 0) {	
					if (mreza[i][j] == ' ' && mreza[i+1][j] == 'O') {
						mreza[i][j] = 'O';
						return 0;
					}
					if (mreza[i][j] == 'O' && mreza[i+1][j] == ' ') {
						mreza[i+1][j] = 'O';
						return 0;
					}
				}
				if (j == 0) {	
					if (mreza[i][j] == ' ' && mreza[i][j+1] == 'O') {
						mreza[i][j] = 'O';
						return 0;
					}
					if (mreza[i][j] == 'O' && mreza[i][j+1] == ' ') {
						mreza[i][j+1] = 'O';
						return 0;
					}
				}
				if (i == 2 && j == 2) {	
					if (mreza[i][j] == ' ' && mreza[i-1][j-1] == 'O') {
						mreza[i][j] = 'O';
						return 0;
					}
					if (mreza[i][j] == 'O' && mreza[i-1][j-1] == ' ') {
						mreza[i-1][j-1] = 'O';
						return 0;
					}
				}
				if (i == 2) {	
					if (mreza[i][j] == ' ' && mreza[i-1][j] == 'O') {
						mreza[i][j] = 'O';
						return 0;
					}
					if (mreza[i][j] == 'O' && mreza[i-1][j] == ' ') {
						mreza[i-1][j] = 'O';
						return 0;
					}
				}
				if (j == 2) {	
					if (mreza[i][j] == ' ' && mreza[i][j-1] == 'O') {
						mreza[i][j] = 'O';
						return 0;
					}
					if (mreza[i][j] == 'O' && mreza[i][j-1] == ' ') {
						mreza[i][j-1] = 'O';
						return 0;
					}
				}
				if (mreza[i][j] == ' ' && mreza[i+1][j+1] == 'O') {
					mreza[i][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == 'O' && mreza[i+1][j+1] == ' ') {
					mreza[i+1][j+1] = 'O';
					return 0;
				}
				if (mreza[i][j] == ' ' && mreza[i-1][j-1] == 'O') {
					mreza[i][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == 'O' && mreza[i-1][j-1] == ' ') {
					mreza[i-1][j-1] = 'O';
					return 0;
				}
				if (mreza[i][j] == ' ' && mreza[i][j-1] == 'O') {
					mreza[i][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == 'O' && mreza[i][j-1] == ' ') {
					mreza[i][j-1] = 'O';
					return 0;
				}
				if (mreza[i][j] == ' ' && mreza[i-1][j] == 'O') {
					mreza[i][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == 'O' && mreza[i-1][j] == ' ') {
					mreza[i-1][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == ' ' && mreza[i][j+1] == 'O') {
					mreza[i][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == 'O' && mreza[i][j+1] == ' ') {
					mreza[i][j+1] = 'O';
					return 0;
				}
				if (mreza[i][j] == ' ' && mreza[i+1][j] == 'O') {
					mreza[i][j] = 'O';
					return 0;
				}
				if (mreza[i][j] == 'O' && mreza[i+1][j] == ' ') {
					mreza[i+1][j] = 'O';
					return 0;
				}
			}
		}
	}

return 0;
}
// Main funkcija z "game" loopom
int main() {
	int stolpec = 0;
	int vrstica = 0;
	// Prvi game loop, ki omogoca ponavljanje igre
	while (true)
	{
		//Prva poteza
		prvaPoteza = true;
		cout << izris();
		// Drugi game loop s katerim zacnemo igro
		while (true)
		{
			if (preveriZmago() == 37) {
				cout << "Zmagal si, cestitam!" << endl << endl;
				break;
			}
			if (preveriZmago() == 5) {
				cout << "Zal si izgubil. Poiskusi se enkrat!" << endl;
				break;
			}
			if (neodloceno()) {
				cout << "Bilo je neodloceno. Poiskusi se enkrat!" << endl;
				break;
			}
			cout << "Vpisi stolpec polja: ";
			cin >> stolpec;
			cout << endl << "Vpisi vrstico polja: ";
			cin >> vrstica;
			if (stolpec > (S_MREZA - 1) || vrstica > (S_MREZA - 1)) {
				cout << "To polje ne obstaja." << endl;
				continue;
			}
			if (mreza[vrstica][stolpec] != ' ') {
				cout << endl << "Ups, to polje je ze zasedeno." << endl << endl;
				continue;
			}
			else {
				mreza[vrstica][stolpec] = 'X';
				system("cls");
				cout << izris();
			}
			if (preveriZmago() == 37) {
				cout << "Zmagal si, cestitam!" << endl << endl;
				break;
			}
			if (preveriZmago() == 5) {
				cout << "Zal si izgubil. Poiskusi se enkrat!" << endl;
				break;
			}
			if (neodloceno()) {
				cout << "Bilo je neodloceno. Poiskusi se enkrat!" << endl;
				break;
			}
			cout << endl << "Zdaj je na potezi racunalnik.." << endl;
			razmisljaj(3);
			racOvrednoti();
			prvaPoteza = false;
			system("cls");
			cout << izris();
		}
		char izbira = 'n';
		cout << "Bi odigral se eno igro? (d/n) ";
		cin >> izbira;
		if (izbira == 'd') {
			reset();
			cout << endl;
			continue;
		}
		else {
			cout << "Adios." << endl;
			break;
		}
	}
	return 0;
}
Dont mind the language, it's my native, i'm sure you will be able to dechiphyr what does the code do. So I would like to hear your opinions (good or bad). And about the AI, i sure hope there is an alghoritm for turn-based games because i cant imagine programming all the possible solutions for games like chess or connect four.

Thank you.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Sponsored Links
  #2 (permalink)  
Old 08-16-2007, 12:01 PM
WingedPanther's Avatar   
WingedPanther WingedPanther is offline
Super Moderator
 
Join Date: Jul 2006
Age: 35
Posts: 3,418
Last Blog:
wxWidgets is NOT code ...
Rep Power: 37
WingedPanther is a splendid one to beholdWingedPanther is a splendid one to beholdWingedPanther is a splendid one to beholdWingedPanther is a splendid one to beholdWingedPanther is a splendid one to beholdWingedPanther is a splendid one to behold
Default

There is another thread about Tic-Tac-Toe. Check it out here and here.
__________________
CodeCall Blog | CodeCall Wiki | Shareware | Linux Forum
Programming is a branch of mathematics.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
need help with simple C++ TicTacToe game with AI flupke1 C and C++ 11 08-14-2007 11:27 AM
Creating a card game (multiplaye online with AI).. what do I program this in? anothersoldier General Programming 1 07-19-2007 07:46 AM
Paying for Links Chan Marketing 26 05-02-2007 09:37 PM


All times are GMT -5. The time now is 02:11 AM.

Contest Stats

WingedPanther ........ 2753.6
Xav ........ 2704
Brandon W ........ 1702.32
John ........ 1207.73
marwex89 ........ 1175.24
morefood2001 ........ 966.05
dcs ........ 655.75
Steve.L ........ 475.59
orjan ........ 418.58
Aereshaa ........ 383.54

Contest Rules

CodeCall Goal

Goal: 100,000 Posts
Complete: 100%


Complete - Celebrate!

Ads