#include<iostream>
#include<ctime>
using namespace std;
#define MAX 25
class bingo
{
public:
void random(int val1);//숫자를 입력 받아서 랜덤으로 숫자를 빙고판에 뿌리는 함수
void showbingo();//현재 빙고판을 보여주는 함수
void inputval(int val2);//선택할 숫자를 입력 받아서 빙고판에 넣는 함수
bool checkbing();//빙고인지 확인하는 함수
void play();//게임하는 함수
private:
int** bing1;
int value;
int r,c;
};
void bingo::random(int val1){
int x,t;
int r1,c1;
int count;
bing1 = new int *[MAX];
value = val1;
x = value * value;
srand((unsigned)time(0));
for(r=0;r<value;r++){
bing1[r] = new int[value];
}
for(r=0;r<value;r++){
for(c=0;c<value;c++){
bing1[r][c] = 0;
}
}
for(r=0;r<value;r++){
for(c=0;c<value;c++){
back:
count = 0;
if(r == value/2 && c == value/2){
continue;
}
else{
t = (rand()%x) + 1;
for(r1=0;r1<value;r1++){
for(c1=0;c1<value;c1++){
if(bing1[r1][c1] == t){
count++;
break;
}
else
continue;
}
}
if(count == 0)
bing1[r][c] = t;
else
goto back;
}
}
}
}
void bingo::showbingo(){
cout<<"Your bingo card:"<<endl;
for(r=0;r<value;r++){
for(c=0;c<value;c++){
cout<<bing1[r][c]<<" ";
}
cout<<endl;
}
}
void bingo::inputval(int val2){
for(r=0;r<value;r++){
for(c=0;c<value;c++){
if(bing1[r][c] == val2)
bing1[r][c] = 0;
break;
}
}
}
bool bingo::checkbing(){
int count;
for(r=0;r<value;r++){
count = 0;
for(c=0;c<value;c++){
if(bing1[r][c] == 0)
count++;
}
if(count == value)
return true;
}
for(r=0;r<value;r++){
count = 0;
for(c=0;c<value;c++){
if(bing1[c][r] == 0)
count++;
}
if(count == value)
return true;
}
count = 0;
for(r=0;r<value;r++){
if(bing1[r][r] == 0)
count++;
if(count == value)
return true;
}
count = 0;
for(r=0;r<value;r++){
if(bing1[r][value - r] == 0)
count++;
if(count == value)
return true;
}
return false;
}
void bingo::play(){
int val3;
showbingo();
while(1){
cout<<"Draw one number: ";
cin>>val3;
cout<<endl;
inputval(val3);
showbingo();
if(checkbing() == 1){
cout<<"BINGO!!!"<<endl;
break;
}
}
}
void main()
{
bingo B;
int rc;
cout<<"Input the number of row and col:";
cin>>rc;
B.random(rc);
B.play();
system("pause");
}
동적할당을 활용해서 빙고게임을 만들었는데, 문제가 발생하네요..
숫자를 입력했을때, bing1[r][0]의 값, 즉 맨 앞줄의 값만 인식하여서 그 값들을 제외하고는 값이 변환이 안되네요...
inputval의 함수를 수정을 해줘야 될것 같긴한데..
빙고판이 출력될때, 빙고판이 제대로 출력 된다는 말은 포인터를 제대로 인식을 한다는 소리인데..
왜 값을 변형하려는게 안될까요???
왜 그런건가요??