connect 4 game

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include<iostream>
#include <string>
using namespace std;
void display();
bool check(int a, int b);
int drop(int b, char player);
char place[6][7];//available for whole program

int main()
{
	for(int a =0;a <= 5; a++){		//fill place with whitespace
		for(int b = 0; b<=6; b++)	
			place[a][b] = ' ';		
}								
	display();//Displays for first time so players can see the board
	int hold;//Will house user row choice
	int hold2 = 0;//will hold drop value
	int charsPlaced = 0;//Number of peices dropped so can end game if a draw
	bool gamewon = false;//Will be changed to true when game is won and will exit while loop
	char player = 15;//start as player 2 will change back 2 player 1
	while(!gamewon){//will stop when game is won, ! means NOT makes the oppisite be checked
		if(hold2 != -1){//check if there was a error in the last drop
			if(player == 15){//if player 2 lasted dropped a piece so its player 1s turn
				cout<<"player 1 drop where?";
				player = 254;//char of players piece
			}
			else{
				cout<<"player 2 drop where?";
				player = 15;//char of player piece
			}
		}
		while(true){//will run untill 'break;'
			if(charsPlaced == 42) break;//if draw
			cin>>hold;//get user input
			hold--;//take off 1 to account for arrays starting at 0 not 1
			if(hold <=6 && hold>= 0) break;//if within valid range stop loop
			else cout<< "\nplease enter a value between 1 and 7 :";//ask for input and loop again
			if (cin.fail())	//catch a non number
			{						//
				cin.clear();		//Stops cin trying to put its value in to hold
				char c;			//Try entering a non number without this, 2 see what this does
				cin>>c;			//
			}						//Catch a non number

		}
		if(charsPlaced == 42) break;//if draw
		hold2 = drop(hold,player);//drop the player store the row in hold2
		if(hold2 == -1)	cout<<"Colomn is full\nPlease enter another number between 1 and 7:";//if error -1 row is full
		else{
			gamewon = check(hold2,hold);//check if game is run
			charsPlaced ++;//another character has been succesfully placed
			system("cls");//This clears the screen works with windows, not nesscery to run game
			display();//displayed updated board
		}
	}
	system("cls");//this clears the screen
	if(charsPlaced == 42){//if draw
		cout<<"No winner, Game was draw\n";
		system("pause");
		return 0;
	}
	if(player == 15)//if won by player 2
		cout<<"gamewon by : player 2\n";
	else cout<<"gamewon by : player 1\n";//Else won by player 1
	system("pause");//pauses before exit so players can see who won, works with windows
	return 0;//Exit application
}
void display(){
	cout<<" 1   2   3   4   5   6   7\n";
	for(int a = 0; a<= 5; a++)
	{
		for(int b =0; b <= 6; b++) cout<<char(218)<<char(196)<<char(191)<<" ";
		cout<<'\n';
		for(int b =0; b <= 6; b++) cout<<char(179)<<place[a][b]<<char(179)<<" ";
		cout<<'\n';
		for(int b =0; b <= 6; b++) cout<<char(192)<<char(196)<<char(217)<<" ";
		cout<<'\n';
	}
}
bool check(int a, int b){
	int vertical = 1;//(|)
	int horizontal = 1;//(-)
	int diagonal1 = 1;//(\)
	int diagonal2 = 1;//(/)
	char player = place[a][b];
	int i;//vertical
	int ii;//horizontal
	//check for vertical(|)
	for(i = a +1;place[i][b] == player && i <= 5;i++,vertical++);//Check down
	for(i = a -1;place[i][b] == player && i >= 0;i--,vertical++);//Check up
	if(vertical >= 4)return true;
	//check for horizontal(-)
	for(ii = b -1;place[a][ii] == player && ii >= 0;ii--,horizontal++);//Check left
	for(ii = b +1;place[a][ii] == player && ii <= 6;ii++,horizontal++);//Check right
	if(horizontal >= 4) return true;
	//check for diagonal 1 (\)
	for(i = a -1, ii= b -1;place[i][ii] == player && i>=0 && ii >=0; diagonal1 ++, i --, ii --);//up and left
	for(i = a +1, ii = b+1;place[i][ii] == player && i<=5 && ii <=6;diagonal1 ++, i ++, ii ++);//down and right
	if(diagonal1 >= 4) return true;
	//check for diagonal 2(/)
	for(i = a -1, ii= b +1;place[i][ii] == player && i>=0 && ii <= 6; diagonal2 ++, i --, ii ++);//up and right
	for(i = a +1, ii= b -1;place[i][ii] == player && i<=5 && ii >=0; diagonal2 ++, i ++, ii --);//up and left
	if(diagonal2 >= 4) return true;
	return false;
}
int drop(int b, char player){
	if(b >=0 && b<= 6)
	{
		if(place[0][b] == ' '){
			int i;
			for(i = 0;place[i][b] == ' ';i++)
				if(i == 5){place[i][b] = player;
			return i;}
			i--;
			place[i][b] =player;
			return i;

		}
		else{
			return -1;
		}

	}
	else{
		return -1;
	}

}

This is the code for a connect 4 game but i need to ask the user their names but i don't know how to do that. i added
1
2
cout<<"Enter player1 name\n";
cin>>player1

but it when i inputted the name, it repeated the question 5 or 6 times.
try putting it before your while loop. you prb got it inside the while loop so every time it cycles through it its asking you it again until the game is over
or if you want it inside the game loop make it an if statement that uses a flag as its if statement and just throw the flag after they enter their name
Topic archived. No new replies allowed.