-
Notifications
You must be signed in to change notification settings - Fork 1
/
Board.cpp
199 lines (182 loc) · 6.47 KB
/
Board.cpp
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/***************************************************************************//**
* @file File containing the implementation for the Board class.
*
* @brief Contains the implementation for the Boad class.
*******************************************************************************/
#include "Board.h"
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: Constuctor, creates the board parts and makes the scoring
* strings
*
* @param[in] int x - the center width of the board
* @param[in] int y - the height of the center of the board
* @param[in] int width - the total width of the board
* @param[in] int height - the total height of the board
* @param[in] int border - the thickness of the border
*******************************************************************************/
Board::Board(int x, int y, int width, int height, int border) :
x(x), y(y), width(width), height(height), border(border),
left_text(NULL), right_text(NULL)
{
//creates unsigned charactor arraws for scoring later
left_text = new (nothrow) unsigned char[1];
right_text = new (nothrow) unsigned char[1];
center_text = new (nothrow) unsigned char[1];
left_text[0] = '\0';
right_text[0] = '\0';
center_text[0] = '\0';
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: Destructor, deletes allocated arrays
*******************************************************************************/
Board::~Board()
{
delete[] left_text;
delete[] right_text;
delete[] center_text;
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: Fills the left text array with a string
*
* @param[in] string text - the left score
*******************************************************************************/
void Board::setLeftText(string text)
{
delete[] left_text;//clears current score
left_text = new (nothrow) unsigned char[text.size() + 1]; //creates
//unsigned array
for (unsigned int i = 0; i < text.size(); i++)
{
left_text[i] = (unsigned char) text[i]; //fills array from string
};
left_text[text.size()] = '\0';
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: Fills the right text array with a string
*
* @param[in] string text - the right score
*******************************************************************************/
void Board::setRightText(string text)
{
delete[] right_text; //clears current score
right_text = new (nothrow) unsigned char[text.size() + 1];
for (unsigned int i = 0; i < text.size(); i++)
{ //converts string to unsigned char
right_text[i] = (unsigned char) text[i];
};
right_text[text.size()] = '\0';
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: Fills the end game text with the wining side
*
* @param[in] string text - text to be converted to unsigned char
*******************************************************************************/
void Board::setCenterText(string text)
{
delete[] center_text; //deletes current string
center_text = new (nothrow) unsigned char[text.size() + 1];
for (unsigned int i = 0; i < text.size(); i++)
{ //converts string to unsigned char array
center_text[i] = (unsigned char) text[i];
};
center_text[text.size()] = '\0';
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: returns the x coordinate for other functions
*
* @returns x - x coordinant for the center of the board
*******************************************************************************/
int Board::getX()
{
return x;
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: returns the y coordinate of the board for other functions
*
* @returns y - y coordinant for the center of the board
*******************************************************************************/
int Board::getY()
{
return y;
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: returns the width of the board for other functions
*
* @returns width - the width of the board
*******************************************************************************/
int Board::getWidth()
{
return width;
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: returns the height of the board for other functions
*
* @returns height - the height of the board
*******************************************************************************/
int Board::getHeight()
{
return height;
}
/***************************************************************************//**
* @author Daniel Andrus
*
* @par Description: Draws the net, the border, and the scores for the bored
* as well as the end game text for the winner
*******************************************************************************/
void Board::draw()
{
glColor3d( 1.0, 0.8, 0.8 );
//creates a border that is visable if any part of it is on screen
glRecti( x - border, y - border, x + border + width, y );
glRecti( x - border, y - border, x, y + height + border );
glRecti( x + width + border, y + height + border, x + width, y-border);
glRecti( x + width + border, y + height + border, x -border, y+height);
//creates the net
glLineStipple(3, 0xAAAA );
glEnable( GL_LINE_STIPPLE );
glColor3d( 0.8, 1.0, 0.8 );
glBegin( GL_LINES );
glVertex2i( width/2, 0 );
glVertex2i( width/2, height );
glEnd();
glDisable( GL_LINE_STIPPLE );
glColor3d( 0.8, 0.8, 1.0 );
glLineWidth( 2.5 );
//creates left score
glPushMatrix();
glScalef( 0.25, 0.25, 1.0 );
glTranslated( (width / 2 - 64) * 4.0, (height - 32) * 4.0, 0);
glutStrokeString(GLUT_STROKE_ROMAN, left_text);
glPopMatrix();
//creates right score
glPushMatrix();
glScalef( 0.25, 0.25, 1.0 );
glTranslated( (width / 2 + 64) * 4.0, (height - 32) * 4.0, 0);
glutStrokeString(GLUT_STROKE_ROMAN, right_text);
glPopMatrix();
//creates end game text
glColor3d( 1.0, 5.0, 0.0 );
glPushMatrix();
glScalef( 0.25, 0.25, 1.0 );
glTranslated( (width / 2 - 120) * 4.0, (height / 2 - 16) * 4.0, 0);
glutStrokeString(GLUT_STROKE_ROMAN, center_text);
glPopMatrix();
}