Language C++, if i could just get a start on the programming of the project just
ID: 3700428 • Letter: L
Question
Language C++, if i could just get a start on the programming of the project just to undersand which direction to take. Help is greatly appreciated!
Part 1: Background Gomoku, also known as Gobang and Five-in-a-row is a two-player board game played traditionally on a 15 x 15 board. Players take alternating turns to place black or white pieces in empty blocks on the grid. A player wins the game by placing 5 of their pieces in an unbroken line, horizontally, vertically or diagonally. In this project you are required to: 1. Implement the Gomoku game for a board size of nxn where 6 S n 15 2. Implement two different algorithms that will play Gomoku against each other.Explanation / Answer
#include <iostream>
#include "Array.h"
using namespace std;
int Array::operator()(const int nCol, const int nRow)
{
return adData[nRow][nCol];
}
void Array::operator()(const int nCol, const int nRow, int value)
{
adData[nRow][nCol]=value;
}
void Array::operator()()
{
// reset all elements of the Array to 0
for (int nCol=0; nCol<15; nCol++)
for (int nRow=0; nRow<15; nRow++)
adData[nRow][nCol] = 0;
}
class Array
{
private:
int adData[15][15];
public:
Array()
{
// Set all elements of the Array to 0
for (int nCol=0; nCol<15; nCol++)
for (int nRow=0; nRow<15; nRow++)
adData[nRow][nCol] = 0;
}
int operator()(const int nCol, const int nRow);
void operator()(const int nCol, const int nRow, int value);
void operator()();
};
[Project]
FileName=camoba.dev
Name=camoba
UnitCount=5
Type=1
Ver=1
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=
IsCpp=1
Icon=
ExeOutput=
ObjectOutput=
OverrideOutput=0
OverrideOutputName=
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=
[Unit1]
FileName=main.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=ujjatek.h
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit7]
FileName=ujjatek.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit8]
FileName=Toposz.h
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit9]
FileName=ujjatek.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit10]
FileName=Toposz.h
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit11]
FileName=ujjatek.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit12]
FileName=Toposz.h
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit13]
FileName=ujjatek.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit14]
FileName=Toposz.h
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit15]
FileName=ujjatek.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit3]
FileName=ujjatek.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit4]
FileName=Array.h
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit5]
FileName=Array.cpp
CompileCpp=1
Folder=camoba
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
#include <cstdlib>
#include <iostream>
#include <string>
#include "ujjatek.h"
using namespace std;
int main(void)
{
char ertek;
do
{
puts("++++++++++++++++++++++++++++++++");
puts("+ Amoba Jatek kotelezo program +");
puts("++++++++++++++++++++++++++++++++");
puts("+ Keszitette: Mester Gabor +");
puts("++++++++++++++++++++++++++++++++");
puts("+ Menu valasztas: +");
puts("+ 1. Jatek inditasa +");
puts("+ 2. Info +");
puts("+ q. Kilepes +");
puts("++++++++++++++++++++++++++++++++");
ujjatek a = ujjatek();
cin >> ertek;
switch(ertek)
{
case '1':
puts("A jatek indul");
a.startjatek();
//ujjatek::startjatek();
break;
case '2':
puts("Szimpla amoba(Five-in-a-row, Gomoku) Jatek A human Jatekos az 'X', a gep 'O', a Jatekban az nyer aki elobb kirak 5-ot vizszintes, fuggoleges vagy atlos iranyban Kilepni a 'q' betu lenyomasaval lehet. Jo Jatekot!");
break;
default: puts("Hibás karakter!");
break;
}
}
while(ertek!='q');
return 0;
}
#include "ujjatek.h"
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
Array prior;
//int prior[15][15];
ujjatek::ujjatek()
{
x1 = 0;
y1 = 0;
int i = 0;
int j = 0;
for ( i = 0; i < 9; i++)
{
for ( j = 0; j < 9; j++)
{
tabla[i][j] = 0;
// display_tabla[i][j] = ' ';
}
}
}
void ujjatek::startjatek()
{
string topbe=" ";
/* for(int cv=0; cv<12; cv++)
{
for(int cv2=0; cv2<12; cv2++)
{
tabla[cv][cv2]=0;
}
}
*/
char kilep1[3], kilep2[3];
int vege=1, lepesszam=0, lszam=0;
do
{
lszam++;
//char xx1;
//char yy1;
//int x1, y1;
ujjatek::tablaki();
//priorki(); //prioritástábla
puts("Kerem az X kordinata erteket:");
cin >> kilep1;
puts("Kerem az Y kordinata erteket:");
cin >> kilep2;
//x1=Kiirat::integerre(xx1);
//y1=Kiirat::integerre(yy1);
x1=atoi(kilep1);
y1=atoi(kilep2);
x1=x1-1;
y1=y1-1;
cout << "X: " << x1+1 << " Y: " << y1+1 << " ";
if(!strcmp(kilep1,"q") || !strcmp(kilep2,"q"))
{
vege=0;
}
if(x1<9 && x1>=0 && y1<9 && y1>=0)
{
if(tabla[y1][x1]==1 || tabla[y1][x1]==2)
{
puts("Ide nem tehetsz X-et");
}
else
{ //puts("tablaxy=1");
tabla[y1][x1]=1;
//puts("if winsgame");
if(ujjatek::WinsGame4(y1,x1)!=1)
{ //puts("priornullázás");
ujjatek::priornul();
ujjatek::DoMove();
lepesszam++;
if(ujjatek::ellenrak()==1)
{
ujjatek::tablaki();
puts("Vesztettel!");
vege=0;
}
}
else
{
vege=0;
ujjatek::tablaki();
puts("Nyertel!");
return;
}
}
}
else
{
if(x1==113 || y1==113)
{
vege=0;
}
puts("Kerem a megadott szamok 1-9-ig legyenek");
}
if(lepesszam>=40)
{
vege=0;
ujjatek::tablaki();
puts("A tabla betelt, dontetlen!");
}
}
while(vege!=0);
}
void ujjatek::tablaki()
{
int osz;
puts("0 1 2 3 4 5 6 7 8 9");
for(int cv=0; cv<9; cv++)
{
osz=cv+1;
for(int cv2=0; cv2<9; cv2++)
{
if(tabla[cv][cv2]==0)
if(cv2==0)
{
cout << osz << " ";
}
else
{
cout << " ";
}
if(tabla[cv][cv2]==1)
if(cv2==0)
{
cout << osz << " X ";
}
else
{
cout << "X ";
}
if(tabla[cv][cv2]==2)
if(cv2==0)
{
cout << osz << " O ";
}
else
{
cout << "O ";
}
}
cout << " ";
}
}
void ujjatek::priorki()
{
for(int cv=0; cv<9; cv++)
{
for(int cv2=0; cv2<9; cv2++)
{
cout << prior(cv,cv2) << " ";
}
cout << " ";
}
}
void ujjatek::priornul()
{
prior();
/*for(int cv=0; cv<9; cv++)
{
for(int cv2=0; cv2<9; cv2++)
{
prior(cv,cv2,0);
}
}*/
}
int ujjatek::ellenrak()
{
int maxy=0, maxx=0, maxo=-1;
for(int cv=0; cv<9; cv++)
{
for(int cv2=0; cv2<9; cv2++)
{
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
if(maxo<prior(cv,cv2))
{
maxo=prior(cv,cv2);
maxy=cv;
maxx=cv2;
}
}
}
}
tabla[maxy][maxx]=2;
if(ujjatek::WinsGame4(maxy,maxx)==1)
return 1;
return 0;
}
void ujjatek::DoMove()
{
int i, j, cv, cv2, Player=2, muveveg=1;
// DoMove: Megnézi a számítógép számára hogy ha ide tenne hány X illetve O lenne mellette
// ez alapján tölti fel adatokkal a prioritás táblázatot
for(cv=0;cv<9;cv++)
for(cv2=0;cv2<9;cv2++)
{
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=2;
if(ujjatek::WinsGame2(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+20);
}
tabla[cv][cv2]=0;
}
else
prior(cv,cv2,-1);
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=1;
if(ujjatek::WinsGame2(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+9);
}
tabla[cv][cv2]=0;
}
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=2;
if(ujjatek::WinsGame(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+3);
}
tabla[cv][cv2]=0;
}
else
prior(cv,cv2,-1);
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=1;
if(ujjatek::WinsGame(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+4);
}
tabla[cv][cv2]=0;
}
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=2;
if(ujjatek::WinsGame3(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+1);
}
tabla[cv][cv2]=0;
}
else
prior(cv,cv2,-1);
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=1;
if(ujjatek::WinsGame3(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+2);
}
tabla[cv][cv2]=0;
}
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=2;
if(ujjatek::WinsGame4(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+21);
}
tabla[cv][cv2]=0;
}
else
prior(cv,cv2,-1);
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=1;
if(ujjatek::WinsGame4(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+20);
}
tabla[cv][cv2]=0;
}
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=2;
if(ujjatek::WinsGame5(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+1);
}
tabla[cv][cv2]=0;
}
else
prior(cv,cv2,-1);
if(tabla[cv][cv2]!=1 && tabla[cv][cv2]!=2)
{
tabla[cv][cv2]=1;
if(ujjatek::WinsGame5(cv, cv2)==1)
{
prior(cv,cv2,prior(cv,cv2)+1);
}
tabla[cv][cv2]=0;
}
}
} //DoMove vége
int ujjatek::WinsGame(int i0, int j0)
{
int i, j;
// lenne-e 3 egymás mellett
i = i0;
j = j0-3;
if(j < 0)
j = 0;
while((j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i][j+1] == tabla[i0][j0]) && (tabla[i][j+2] == tabla[i0][j0]) && (tabla[i][j+3] == tabla[i0][j0]))
return 1;
j++;
}
j = j0;
i = i0-3;
if(i < 0)
i = 0;
while(i<=i0)
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j] == tabla[i0][j0]) && (tabla[i+2][j] == tabla[i0][j0]) && (tabla[i+3][j] == tabla[i0][j0]))
return 1;
i++;
}
j = j0-3;
i = i0-3;
while(i<0 || j<0)
{
j++;
i++;
}
while((i <= i0) && (j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j+1] == tabla[i0][j0]) && (tabla[i+2][j+2] == tabla[i0][j0]) && (tabla[i+3][j+3] == tabla[i0][j0]))
return 1;
j++;
i++;
}
j = j0+3;
i = i0-3;
if(i<0)
i=0;
while(j<0 || i<0)
{
j--;
i++;
}
while((i <= i0) && (j >= j0) && (j >= 3))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j-1] == tabla[i0][j0]) && (tabla[i+2][j-2] == tabla[i0][j0]) && (tabla[i+3][j-3] == tabla[i0][j0]))
return 1;
j--;
i++;
}
return 0;
}
int ujjatek::WinsGame2(int i0, int j0)
{
int i, j;
// Lenne-e 4 darab egymás mellett?
i = i0;
j = j0-3;
if(j < 0)
j = 0;
while((j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i][j+1] == tabla[i0][j0]) && (tabla[i][j+2] == tabla[i0][j0]) && (tabla[i][j+3] == tabla[i0][j0]))
return 1;
j++;
}
j = j0;
i = i0-3;
if(i < 0)
i = 0;
while((i <= i0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j] == tabla[i0][j0]) && (tabla[i+2][j] == tabla[i0][j0]) && (tabla[i+3][j] == tabla[i0][j0]))
return 1;
i++;
}
j = j0-3;
i = i0-3;
while(j<0 || i<0)
{
i++;
j++;
}
while((i <= i0) && (j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j+1] == tabla[i0][j0]) && (tabla[i+2][j+2] == tabla[i0][j0]) && (tabla[i+3][j+3] == tabla[i0][j0]))
return 1;
j++;
i++;
}
j = j0+3;
i = i0-3;
while(i<0)
{
i++;
j--;
}
while((i <= i0) && (j >= j0) && (j >= 3))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j-1] == tabla[i0][j0]) && (tabla[i+2][j-2] == tabla[i0][j0]) && (tabla[i+3][j-3] == tabla[i0][j0]))
return 1;
j--;
i++;
}
return 0;
}
int ujjatek::WinsGame4(int i0, int j0)
{
int i, j;
// Nyertne-e? kijött-e 5 darab egymás mellett?
i = i0;
j = j0-4;
if(j < 0)
j = 0;
while((j <= j0)) //függõlegesen kijön-e
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i][j+1] == tabla[i0][j0]) && (tabla[i][j+2] == tabla[i0][j0]) && (tabla[i][j+3] == tabla[i0][j0]) && (tabla[i][j+4] == tabla[i0][j0]))
return 1;
j++;
}
j = j0;
i = i0-4;
if(i < 0)
i = 0;
while((i <= i0)) //vízszintesen kijön-e
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j] == tabla[i0][j0]) && (tabla[i+2][j] == tabla[i0][j0]) && (tabla[i+3][j] == tabla[i0][j0]) && (tabla[i+4][j] == tabla[i0][j0]))
return 1;
i++;
}
j = j0-4;
i = i0-4;
while(i<0 || j<0)
{
i++;
j++;
}
//if(i<0) i=0; if(j<0) j=0;
while((i <= i0) && (j <= j0)) //jobbra le átlósan kijön-e
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j+1] == tabla[i0][j0]) && (tabla[i+2][j+2] == tabla[i0][j0]) && (tabla[i+3][j+3] == tabla[i0][j0]) && (tabla[i+4][j+4] == tabla[i0][j0]))
return 1;
j++;
i++;
}
j = j0+4;
i = i0-4;
while(i<0)
{
i++;
j--;
}
//if(i<0) i=0; //bal lentrõl átlósan jobbra fel
while((i <= i0) && (j >= j0) && (j >= 4))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j-1] == tabla[i0][j0]) && (tabla[i+2][j-2] == tabla[i0][j0]) && (tabla[i+3][j-3] == tabla[i0][j0]) && (tabla[i+4][j-4] == tabla[i0][j0]))
return 1;
j--;
i++;
}
return 0;
}
int ujjatek::WinsGame3(int i0, int j0)
{
int i, j;
// Tesztelés: ha 3 darab lenne egymás mellett
i = i0;
j = j0-2;
if(j < 0)
j = 0;
while((j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i][j+1] == tabla[i0][j0]) && (tabla[i][j+2] == tabla[i0][j0]))
return 1;
j++;
}
j = j0;
i = i0-2;
if(i < 0)
i = 0;
while((i <= i0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j] == tabla[i0][j0]) && (tabla[i+2][j] == tabla[i0][j0]))
return 1;
i++;
}
j = j0-2;
i = i0-2;
while(i<0 || j<0)
{
i++;
j++;
}
while((i <= i0) && (j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j+1] == tabla[i0][j0]) && (tabla[i+2][j+2] == tabla[i0][j0]))
return 1;
j++;
i++;
}
j = j0+2;
i = i0-2;
while(j<0 || i<0)
{
i++;
j--;
}
while((i <= i0) && (j >= j0) && (j>=2))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j-1] == tabla[i0][j0]) && (tabla[i+2][j-2] == tabla[i0][j0]))
return 1;
j--;
i++;
}
return 0;
}
int ujjatek::WinsGame5(int i0, int j0)
{
int i, j;
// Tesztelés hogy ha ide tesz van-e mellette másik
i = i0;
j = j0-1;
if(j < 0)
j = 0;
while((j <= j0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i][j+1] == tabla[i0][j0]))
return 1;
j++;
}
j = j0;
i = i0-1;
if(i < 0)
i = 0;
while((i <= i0))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j] == tabla[i0][j0]))
return 1;
i++;
}
j = j0-1;
i = i0-1;
while(i<0 || j<0)
{
i++;
j++;
}
while((i <= i0) && (i <= 9) && (j <= j0) && (j <= 9))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j+1] == tabla[i0][j0]))
return 1;
j++;
i++;
}
j = j0+1; //if(i<0) i=0;
i = i0-1;
while(i<0)
{
j--;
i++;
}
while((i <= i0) && (i <= 9) && (j >= j0) && (j >= 1))
{
if((tabla[i][j] == tabla[i0][j0]) && (tabla[i+1][j-1] == tabla[i0][j0]))
return 1;
// ha nemsikerül tovább próbáljon
j--;
i++;
}
// Ha nincs ilyen sorozat
return 0;
}
#include <string>
#include <vector>
#include "Array.h"
class ujjatek
{
public:
ujjatek(); //konstruktor
ujjatek operator+();
void startjatek();
void tablaki(); // Játéktábla kirajzolása
void priorki(); //prioritástábla Kiiratása a képernyõre
void priornul(); //prioritástábla nullázása
void DoMove();
int WinsGame(int i0,int j0);
int WinsGame2(int i0,int j0);
int WinsGame3(int i0,int j0);
int WinsGame4(int i0,int j0);
int WinsGame5(int i0,int j0);
int ellenrak(); //ellenség lerakja a prioritastabla alapjan a 'O'-t
private:
int x1;
int y1;
int tabla[15][15];
};
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.