maze game-wchar trouble

I am making a little game but want to include different characters for aesthetic reasons. Although the data type of the array is 'wchar_t', it works with normal ascii but when I enter unicode into it, e.g ☺, it just prints all the characters up to that point and crashes. I believe that it is part of the copying that fails, and maybe because it is a dimensional array. Here is the code so far...
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <windows.h>
using namespace std;


int yourX = 5;
int yourY = 0;
int newX = 5;
int newY =0;
bool press = 0;
bool movepos = 0;

	wchar_t board [100][100][100]= 
	{
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"}
	};

	wchar_t output [100][100][100];//copy of above
	wchar_t palyer[] = {L"@"};


int main()
{

while(1>0)//movment and map loop
	{

		for (int a = 0;a<20;a++)
	{
		for (int b = 0;b<20;b++)
		{
			 output [a][b][0]= board [a][b][0];
		}
	}




		if (output [newY][newX][0]== L'O')//or a no go char
	{
			newX = yourX;
			newY = yourY;
	}



		else if (output [newY][newX][0]== L' ')//if move to space
		{
			yourX = newX;
			yourY = newY;
			movepos = true;
			system ("cls");
			
		}

		else if(output [newY][newX][0]!=L' ')
		{
			newX = yourX;
			newY = yourY;
		}

	output[yourY][yourX][0] = palyer[0];//add the palyer in 
	
	if (movepos == true)
	{
	//____________________________________________________________________________________

	for (int a = 0;a<20;a++)
	{
		for (int b = 0;b<20;b++)
		{
			wcout << output [a][b][0];/*printing the map with palyer*/
		}
		cout << endl;
	}
	//________________________________________________________________________________
	movepos = false
	}

			while(press==false)//if key press loop
			{
			Sleep(80);

			if (GetAsyncKeyState(0x41))
		{
			
			newX = yourX-1;
			press=true;

		}
			if (GetAsyncKeyState(0x57))
		{
			
			newY = yourY -1;
			press=true;
		}
			if (GetAsyncKeyState(0x53))
		{
			
			newY = yourY +1;
			press=true;
		}
			if (GetAsyncKeyState(0x44))
		{
			
			newX = yourX +1;
			press=true;
			
		}
	
		}//type = true break
		
		press=false;
		
		//^^^back up^^^

	}//end of while loop  



	system ("pause");

	return 0;

}


ps sorry mac users for using system()
Last edited on

This seems to work:
(as found in http://stackoverflow.com/questions/2849010/output-unicode-to-console-using-c)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <io.h> //defines _setmode
#include <fcntl.h>//defines _O_U8TEXT
#include <iostream>
#include <windows.h>
using namespace std;


int yourX = 5;
int yourY = 0;
int newX = 5;
int newY =0;
bool press = 0;
bool movepos = 0;

	wchar_t board [100][100][100]= 
	{
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L" ",L"O",L"O",L"O"},
	{L"O",L"O",L"O",L"O",L"O",L" ",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O",L"O"}
	};

	wchar_t output [100][100][100];//copy of above
	wchar_t palyer[] = {L"☺"};


int main(int argv, int argc)
{

while(1>0)//movment and map loop
	{

		for (int a = 0;a<20;a++)
	{
		for (int b = 0;b<20;b++)
		{
			 output [a][b][0]= board [a][b][0];
		}
	}




		if (output [newY][newX][0]== L'O')//or a no go char
	{
			newX = yourX;
			newY = yourY;
	}



		else if (output [newY][newX][0]== L' ')//if move to space
		{
			yourX = newX;
			yourY = newY;
			movepos = true;
			system ("cls");
			
		}

		else if(output [newY][newX][0]!=L' ')
		{
			newX = yourX;
			newY = yourY;
		}

	output[yourY][yourX][0] = palyer[0];//add the palyer in 
	
	if (movepos == true)
	{
	//____________________________________________________________________________________

	for (int a = 0;a<20;a++)
	{
		for (int b = 0;b<20;b++)
		{  _setmode(_fileno(stdout), _O_U8TEXT); //modifies the stdout output to use UTF-8 mode
			wcout << output [a][b][0];/*printing the map with palyer*/
		}
		wcout << endl; //NB cout should be changed to wcout if mode _O_U8TEXT (=UTF-8 bit) is set
//you can also use _O_U8TEXT to set UTF-16 mode
	}
	//________________________________________________________________________________
	movepos = false;
	}

			while(press==false)//if key press loop
			{
			Sleep(80);

			if (GetAsyncKeyState(0x41))
		{
			
			newX = yourX-1;
			press=true;

		}
			if (GetAsyncKeyState(0x57))
		{
			
			newY = yourY -1;
			press=true;
		}
			if (GetAsyncKeyState(0x53))
		{
			
			newY = yourY +1;
			press=true;
		}
			if (GetAsyncKeyState(0x44))
		{
			
			newX = yourX +1;
			press=true;
			
		}
	
		}//type = true break
		
		press=false;
		
		//^^^back up^^^

	}//end of while loop  


	char a;
	cin>>a;

	return 0;

}
Last edited on
methodos, that method is terrible. Use this:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using std::cout;
using std::cin;

int main(int argc, char** argv) {
    // some code
    
    cin.sync();
    cout << "Press any key to continue...";
    cin.get();

    return 0;
}
Topic archived. No new replies allowed.