flickering issues.

ok so i'm programming with dev-c++ and i cant think of anyway to make this
not flicker like it does. all i know is to do it like this i wouldnt know
how to JUST clear the player and not the screen any help would be great thanks
in advance. and i know im using printf but its still in c++
this is my code
i dont want to continue any further with the game until i stop the flickering
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <conio.h>

#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define KEY_Z 122
#define KEY_ENTER 13

#define Sleep Sleep(50);
int littlepotion;
int bigpotion;

int bronzesword;
int ironsword;
int goldsword;
int legendarysword;

int position = 1000;
int cancontinue=0;
int wait=0;

int hp = 10;

char name[20];
char player = 1;
char arrowup = 24;
char arrowdown = 25;
char arrowleft =27;
char arrowright = 26;
char input;
char pack[5];
 
int x = 3;
int y;
void gotoxy(short x,short y);
void gotoxy(int x,int y)
{COORD coord = {x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}
//now use gotoxy(int,int) anywhere i want.
main()
{
      
  system("color B");

    //char = s
    //int = c
    
  printf("welcome to redwood, what is your name?\n%c",arrowright);
  gets(name);
  system("cls");
  printf("oh hello %s ,you are waking up now\n", name);
  printf("    'press z to continue'    ");
  while(input!=27){
  input = getch();
  switch(input){
  case KEY_Z:
       goto wakeup;
       break;}}
       
  wakeup:
         system("cls");
  printf("ugh its already time to wake up...\n");
  system("pause");
 
  

  system("cls");    
printf("|%c|                    \n", player);
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
printf("  'press z to continue'   ");
while(input!=27){
                 input = getch();
                 switch(input){
                               case KEY_Z:
                                    goto bedroom;
                                    
                                 break;}}
bedroom:
        system("cls");
if(x==3 && y==0){       
printf("| |%c                    \n", player );
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
printf("                        \n");
printf(" use %c   to move around\n", arrowup);
printf("    %c%c%c              \n",arrowleft,arrowdown,arrowright);
printf(" z is the action key \n");
printf("try walking to an object like the dressor and press z");
gotoxy(x,y);
printf("%c",player);}
else{
printf("| |                     \n"),player;
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
printf("                        \n");
gotoxy(x,y);printf("%c",player);}
if(x<3){x=3;goto bedroom;}
if(x>19){x=19;goto bedroom;}
if(y>6){y=6;goto bedroom;}
if(y<0){y=0;goto bedroom;}
action:
input=getch();
switch(input){
              
case KEY_RIGHT:
x=x+1;


break;
case KEY_LEFT:
     x=x-1;
   
     
     break;
case KEY_UP:
     y=y-1;
     
     break;
case KEY_DOWN:
     y=y+1;
  
     break;
     case KEY_Z:
  if(x==3 && y==0 || x==3 && y==1){
                             system("cls");
printf("| |    now is not the time to sleep \n");
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
printf(" press z to continue              \n");
gotoxy(x,y);printf("%c",player);
getch();
system("cls");
goto bedroom;}
if(x==6 && y==6 || x==7 && y==6 || x==8 && y==6 || x==9 && y==6){
if(cancontinue==0){
                   system("cls");
printf("| |        YOU FOUND A LITTLE POTION! \n");
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
littlepotion = littlepotion + 1;
cancontinue = 1;
gotoxy(x,y);printf("%c",player);system("pause>nul"); goto bedroom;}
if(cancontinue==1){
                   system("cls");
printf("| |        you have already looked here \n");
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
gotoxy(x,y); printf("%c",player);
system("pause>nul"); goto bedroom;}}
if(x==19 && y==3 || x==19 && y==4 || x==19 && y==5){
         if(cancontinue == 1){
         system("cls");
printf("| |    \n");
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
gotoxy(x,y);printf("%c",player);
goto loading;}if(cancontinue == 0){
     system("cls");
     printf("| |    check your dressor first \n");
printf("|_|                     \n");
printf("bed                     \n");
printf("                    |-| \n");
printf("                    |.| \n");
printf("                    |_| \n");
printf("                    door\n");
printf("      ----              \n");
printf("      |  |              \n");
printf("      ----              \n");
printf("      dressor           \n");
gotoxy(x,y);printf("%c",player);system("pause>nul");goto bedroom;}
                            
}

}//this is end of switch statement
                   
          
          
goto bedroom;
     
loading:     
x=0;y=0;system("cls");
while(wait<3){
printf("/");               
Sleep;
system("cls");
printf(" -");
Sleep;
system("cls");
printf("  \\");
Sleep;
system("cls");
printf("\n   |");
Sleep;
system("cls");
printf("\n\n  /");
Sleep;
system("cls");
printf("\n\n _");
Sleep;
system("cls");
printf("\n\n\\");
Sleep;
system("cls");
printf("\n|");
Sleep;
system("cls");
wait=wait+1;}

      
                                            
  return 0;
}

Try only printing out the contents of a room once, not every frame. Then only reprint the characters if something changes.
how would i go at creating the loop for that?
You are trying to wrestle the console into doing something is is not designed to do.

I suggest reading this:
http://www.cplusplus.com/forum/articles/28558/
The flickering is caused by you constantly clearing the screen.

Honestly, I'm going to suggest you scrap everything and completely start over. And I'm not going to lie, I initially thought this post was a troll.

Instead of clearing the screen all the time, define a 0,0 coordinate for the cursor on the screen and reset it there before outputting to the console. You can do this with the WinAPI (I don't know the function calls for it, but I know it can be done). I'd also recommend buffering the game screen. that is, generate a frame or two in advance before displaying them.

You have everything in your main function. Don't do that. It makes your code difficult to read and is all around bad practice in C. Everything are labeling for goto to jump over to should be placed in it's own function. And as a general rule, don't use goto at all. It causes problems with readability and can lead to instability. (Say you declare a variable and initialize it later. But you have a bunch of gotos set up around that point and you accidentally skip any initialization. When you try to access that variable you get an undetermined result)

You have a bunch of blocks with repeated calls to printf, Doing things like this is really tedious and unnecessary. I'd suggest declaring a single two dimensional array of characters, who's sizes are the number of rows and columns on the game screen (maybe plus one column for the newline character). Then call printf in a loop, iterating through the rows in your 2d char array.


Lastly, you may say it's in c++, but there isnt a single line of c++ code in there. You've included the C headers and have done everything in (albeit bad) C style. Dev-C++ is an outdated and non standard-compliant IDE and compiler set.

that is, conio.h doesn't exist anywhere in the standard, and main should return an integer, not void. So your declaration of it should be int main().

Dev-c++ hasn't been updated in almost a decade (I think, might be longer, might be a little bit shorter)
your saying this isn't for game programming,isn't this what they teach you in college? and also ive tried allegro and i never could get that working..as i tried for about a week and got nothing but errors about the libraries then i tried opengl.. to complicated...
Last edited on
Choice of console or GDI does not make a difference in his problem, which is the constant use of system("cls");.

Proper code will use double-buffering and dirty updates. If you use the NCurses library it does that for you. The Windows Console is likewise designed to use this strategy when you create multiple screen buffers.
i dont know how to "buffer"? what does this mean..
also ive tried using things like
 
void attack();

then using it like
1
2
3
attack(){
//code here
}

and then doing
 
attack();

but i remember i kept getting errors all the time so i went to using goto
and i tried so long using arrays..never figured them out so i avoided them
Last edited on
and what program should i use over dev-cpp?
and xander i did this all in c then i converted to c++ cause i heard there was a gotoxy function (when there wasnt) and i found out how to do it this way
i thought you couldnt have c code in a cpp file but i found out you could so thats what i ment about it being c++.
Last edited on
I recommend code::blocks. There should be an installer for it that comes bundled with the MinGW compiler set.
i was using that when i tried to get allegro but never got allegro working..whats so good about code::blocks?
Nothing. If you like dev-c++, install the Orwell dev-c++. It's awsome. All the goodies of dev-c++ AND without the baddies of dev-c++ and the baddies of the other stuff. It's awsum ,you have to get it!
ok sso like i just got allegro working on devc++ and ive tried it with code::blocks but i never got it set up.. i would rather use code::blocks but when trying to add somthing like allegro omg...
Topic archived. No new replies allowed.