Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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];

};