亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 16.txt

?? 打球小游戲C語言源代碼
?? TXT
字號:
1 /*
  2  * Brick & Ball
  3  * by Jerry Fleming <jerryfleming2006@gmail.com>
  4  * 
  5  * This is a small game inspired from similar one in Motorola Mobile C289,
  6  * and my first REAL program in C :) Please tell me if you have a better
  7  * implementation or any suggestions.
  8  * 
  9  * HISTORY:
 10  * 2006-10-25: third (current) version with c language
 11  * 2006-10-01: second version with tkinter
 12  * 2006-04-19: first version with curses
 13  * 
 14  * TODO:
 15  * Nothing to do right now. :) If you have any ideas to improve or enhance it,
 16  * please contact me.
 17  */
 18 
 19 #include <stdio.h>
 20 #include <string.h>
 21 #include <ncurses.h>
 22 #include <stdlib.h>          /* for exit(), rand(), abs() */
 23 
 24 #include <stddef.h>          /* for NULL */
 25 #include <time.h>            /* for sleep() */
 26 #include <signal.h>          /* for SIGWINCH */
 27 
 28 #define NORMAL 1             /* status of game */
 29 #define PAUSE  2
 30 #define OVER   3
 31 #define QUIT   4
 32 #define BLOCK  1             /* color pairs */
 33 #define TXT    2
 34 #define BAR    3
 35 #define BALL   4
 36 #define CLEAR  5
 37 
 38 extern unsigned int sleep(unsigned int seconds);
 39 
 40 /*
 41  * globals 
 42  */
 43 int speed = 10;
 44 int cnt = 0;                 /* bricks yet remain on board */
 45 int score = 0;
 46 int level = 0;
 47 int width = 40;
 48 int height = 50;             /* for the board */
 49 short state = NORMAL;        /* see define */
 50 char *statestr = "Normal";   /* additional str to explain the game status */
 51 const int bw = 7;            /* brick width */
 52 const char brick[] = "       ";
 53 int bricks[100][3];
 54 int pad;
 55 int ball[2];
 56 int dir[2] = { 1, -1 };
 57 int ch = 0;                  /* user command */
 58 
 59 /*
 60 +-- 62 lines: * text strings -------------------------------------------------------------------------------------------------------------
122  */
123 
124 /*
125  * change sceen size, exit if too small 
126  */
127 void resizescr(int sig)
128 {
129     statestr = "Screen resized.";
130     getmaxyx(stdscr, height, width);
131 }                            /* resizescr()  */
132 
133 /*
134  * print msg on center of screen, exit on pressing Y or N (key is true) or any
135  * char (key false)
136  */
137 bool print_msg(char *msg, bool y_n_key, bool clearmsg)
138 {
139     char *rest;
140     char *str[30];
141     char emptystr[width];
142     int line = 0;
143     int i;
144     int length;
145     int left;
146     int top;
147     char delimiters[] = "\n";
148 
149     length = strlen(str[line] = strtok(msg, delimiters));
150     while ((rest = strtok(NULL, delimiters)) != NULL) {
151         line++;
152         if (length < strlen(rest))
153             length = strlen(rest);
154         str[line] = rest;
155     }
156 
157     top = (height - line) / 2;
158     left = (width - length) / 2;
159     attrset(COLOR_PAIR(TXT));
160     for (i = 0; i <= line; i++) {
161         mvprintw(top++, left, "%s", str[i]);
162     }
164     refresh();
165 
166     timeout(3000);
167     for (;;) {
168         ch = getch();
169         if (y_n_key)
170             break;
171         else {
172             if (ch == ERR || ch == 'y' || ch == 'Y') {
173                 ch = 'Y';
174                 break;
175             }
176             if (ch == 'n' || ch == 'N') {
177                 ch = 'N';
178                 break;
179             }
180         }
181     }
182 
183     if (clearmsg) {
184         top = (height - line) / 2;
185         attrset(COLOR_PAIR(CLEAR));
186         for (i = 0; i < width; i++)
187             emptystr[i] = ' ';
188         for (i = 0; i <= line; i++) {
189             mvaddstr(top++, 0, emptystr);
190         }
191         refresh();
192     }
193     i = ch, ch = 0;          /* clear input for later use */
194     timeout(100);
195 
196     if (i == 'N')
197         return FALSE;
198     return TRUE;
199 }                            /* print_msg()  */
200 
201 /*
202  * draw pad, ball, bricks, and bar together 
203  */
204 void draw_board(void)
205 {
206     int i, j;
207     char barstr[width];
208 
209     level++;
210     cnt = 0;
211     dir[0] = 1, dir[1] = -1;
212 
213     /* brick */
214     i = width % (bw + 1) / 2;   /* width -1 + gap */
215     j = 1;
216     attrset(COLOR_PAIR(BLOCK));
217     for (;;) {
218         mvaddstr(j, i, brick);
219         bricks[cnt][0] = i;
220         bricks[cnt][1] = j;
221         bricks[cnt][2] = 1;
222         i = i + bw + 1;
223         cnt++;
224         if (i >= width - bw) {
225             if (cnt > 50)
226                 break;
227             i = width % (bw + 1) / 2;
228             j += 2;
229         }
230     }
231     bricks[cnt][2] = -1;     /* mark the end or all bricks */
232 
233     if (level == 1) {
234         /* pad */
235         attrset(COLOR_PAIR(BLOCK));
236         pad = rand() % (width - bw - 1);
237         mvaddstr(height - 2, pad, brick);
238 
239         /* bar */
240         for (i = 0; i < width; i++)
241             barstr[i] = ' ';
242         attrset(COLOR_PAIR(BAR));
243         mvaddstr(height - 1, 0, barstr);
244         mvprintw(height - 1, 0, "SCORE: %03d  LEVEL: %d  STATE: %-9s", score,
245                  level, statestr);
246     }
247 
248     /* ball */
249     attrset(COLOR_PAIR(BALL));
250     ball[0] = pad, ball[1] = height - 3;
251     while (abs(ball[0] - pad) < 15)
252         ball[0] = rand() % (width - bw - 1);
253     mvaddstr(ball[1], ball[0], " ");
254 
255     refresh();
256 }                            /* draw_board()  */
257 
258 /*
259  * try to stop game 
260  */
261 void quit_game(const int ch)
262 {
263     if (ch == 'q') {
264         if (cnt < 0          /* do not want another level */
265             || (cnt > 0 && print_msg(tExit, FALSE, TRUE))   /* really meant to
266                                                              * exit */
267             ) {
268             state = QUIT;
269             statestr = "Quit game";
270         }
271     } else if (ch == 'o') {
272         state = OVER;
273         statestr = "Game over";
274         print_msg(tOver, TRUE, FALSE);
275     } else if (state == PAUSE) {
276         state = NORMAL;
277         statestr = "Normal";
278     } else {
279         state = PAUSE;
280         statestr = "Pause";
281     }
282     /* bar */
283     attrset(A_NORMAL | COLOR_PAIR(BAR));
284     mvprintw(height - 1, 0, "SCORE: %03d  LEVEL: %d  STATE: %-9s", score, level,
285              statestr);
286     refresh();
287 }                            /* quit_game()  */
288 
289 /*
290  * move the ball forward, turn if necessary, add scores, and quite if hit ground
291  */
292 void move_ball()
293 {
294     int i;
295 
296     if (state != NORMAL)
297         return;
298 
299     /* ball */
300     attrset(A_REVERSE | COLOR_PAIR(BALL));
301     mvaddstr(ball[1], ball[0], " ");
302     /* restore pad after hit */
303     attrset(A_NORMAL | COLOR_PAIR(BLOCK));
304     mvaddstr(height - 2, pad, brick);
305     ball[0] += dir[0], ball[1] += dir[1];
306     attrset(A_NORMAL | COLOR_PAIR(BALL));
307     mvaddstr(ball[1], ball[0], " ");
308 
309     /* change direction */
310     if (ball[1] < 0)
311         dir[1] = -dir[1];
312     if (ball[0] < 0 || ball[0] > width)
313         dir[0] = -dir[0];
314 
315     /* hit bricks */
316     attrset(A_REVERSE | COLOR_PAIR(BLOCK));
317     for (i = 0;; i++) {
318         if (bricks[i][2] == -1)
319             break;
320         if (bricks[i][2] == 0)
321             continue;
322         if (bricks[i][0] <= ball[0]
323             && bricks[i][0] + bw >= ball[0]
324             && bricks[i][1] == ball[1]
325             ) {
326             bricks[i][2] = 0;
327             /*
328              * tricky: make sure the direction is top-down
329              */
330             dir[1] = abs(dir[1]);
331             score += 10;
332             cnt--;
333             refresh();
334             mvaddstr(bricks[i][1], bricks[i][0], brick);
335             if (cnt <= 0) {  /* another level */
336                 if (print_msg(tGoon, FALSE, TRUE)) {
337                     draw_board();
338                 } else {
339                     quit_game('q');
340                 }
341             }
342         }
343     }
344 
345     /* hit pad */
346     if (ball[1] == height - 2) {
347         if (ball[0] < pad || ball[0] > pad + bw)
348             quit_game('o');
349         /*
350          * for some reason, the ball may enter the pad, and change dir will not
351          * get it out, so use abs() to turn back
352          */
353         dir[1] = -abs(dir[1]);
354         if (ball[0] == pad || ball[0] == pad + bw) {    /* on both ends */
355             dir[0] = -dir[0];
356         }
357     }
358 
359     /* bar */
360     attrset(A_NORMAL | COLOR_PAIR(BAR));
361     mvprintw(height - 1, 0, "SCORE: %03d  LEVEL: %d  STATE: %-9s", score, level,
362              statestr);
364     refresh();
365 }                            /* move_ball()  */
366 
367 /*
368  * move pad to left or right according to command 
369  */
370 int move_pad(const int ch)
371 {
372     int move;
373 
374     switch (ch) {
375         case KEY_LEFT:
376             move = -2;
377             break;
378         case KEY_RIGHT:
379             move = 2;
380             break;
381         case 'q':
382             quit_game(ch);
383             break;
384         case 'p':
385             quit_game(ch);
386             break;
387         default:
388             return 0;
389     }
390     attrset(A_REVERSE | COLOR_PAIR(BLOCK));
391     mvaddstr(height - 2, pad, brick);
392     pad = pad + move;
393     if (pad < 0)
394         pad = 0;
395     if (pad > width - bw)
396         pad = width - bw;
397     attrset(A_NORMAL | COLOR_PAIR(BLOCK));
398     mvaddstr(height - 2, pad, brick);
399 
400     refresh();
401     return 0;
402 }                            /* move_pad()  */
403 
404 /*
405  * main 
406  */
407 int main(void)
408 {
409     initscr();
410     start_color();
411     init_pair(BLOCK, COLOR_BLACK, COLOR_RED);   /* for bricks and pad */
412     init_pair(TXT, COLOR_CYAN, COLOR_BLACK);    /* for text strings */
413     init_pair(BAR, COLOR_WHITE, COLOR_BLUE);    /* for bar */
414     init_pair(BALL, COLOR_BLACK, COLOR_WHITE);  /* for ball */
415     init_pair(CLEAR, COLOR_BLACK, COLOR_BLACK); /* to clear objects */
416     noecho();
417     raw();                   /* disable line buffering */
418     timeout(100);
419     cbreak();
420     keypad(stdscr, TRUE);
421     curs_set(0);
422     getmaxyx(stdscr, height, width);
423     signal(SIGWINCH, resizescr);
425     if (height >= 20 && width >= 80) {
426         print_msg(tStart, TRUE, TRUE);
431         clear();
432         draw_board();
433         for (;;) {
434             ch = getch();
435             move_ball();
436             if (ch != ERR)
437                 move_pad(ch);
438             if (state == OVER || state == QUIT)
439                 break;
440         }
441     } else {                 /* screen too small, exit with complaint */
442         state = QUIT;
443         statestr = "Screen too small. Game aborted.";
444     }
445 
446     sleep(1), flash();
447     sleep(1), flash();
448     sleep(1), flash();
449     curs_set(1);
450     keypad(stdscr, FALSE);
451     nocbreak();
452     notimeout(stdscr, TRUE);
453     noraw();
454     echo();
455     endwin();
456     puts(statestr);
457     exit(0);
458 }                            /* main()  */
459 
460 /*
461  * Local variables:
462  * tab-width: 4
463  * indent-tabs-mode: nil
464  * c-basic-offset: 4
465  * End:
466  * VIM: tw=80:sw=4:sts=4:fdm=marker
467  */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费人成精品欧美精品| 亚洲最色的网站| 欧美一区二区三区在线看| 色哟哟日韩精品| 成人h动漫精品一区二区| 国内外成人在线| 国产一区免费电影| 国产乱国产乱300精品| 国产一区二区中文字幕| 美女视频黄 久久| 蜜桃视频在线观看一区二区| 男男视频亚洲欧美| 九色综合狠狠综合久久| 国产在线播放一区二区三区| 粉嫩aⅴ一区二区三区四区 | 69精品人人人人| 在线不卡中文字幕| 日韩久久免费av| 久久网站最新地址| 亚洲国产精品成人综合| 亚洲精品视频一区| 亚洲成人黄色小说| 久久99最新地址| www.成人在线| 欧美日韩一区二区在线视频| 日韩一区二区精品葵司在线| 久久久精品人体av艺术| 亚洲精品免费播放| 日韩福利视频网| 国产精品一区二区男女羞羞无遮挡 | 亚洲欧美日韩小说| 婷婷久久综合九色综合绿巨人| 蜜臀久久99精品久久久画质超高清 | 麻豆freexxxx性91精品| 国产福利视频一区二区三区| 91蝌蚪porny成人天涯| 欧美一级淫片007| 国产精品素人视频| 五月综合激情婷婷六月色窝| 国产盗摄视频一区二区三区| 日本精品一区二区三区四区的功能| 欧美一区二区三区男人的天堂| 中文幕一区二区三区久久蜜桃| 一区二区三区资源| 精品一区二区在线免费观看| 91麻豆免费在线观看| 精品久久久久av影院| 一区二区三区国产精华| 福利91精品一区二区三区| 欧美三级日韩在线| 18成人在线观看| 国产乱子伦视频一区二区三区 | 欧洲av在线精品| 国产视频不卡一区| 视频一区在线播放| 93久久精品日日躁夜夜躁欧美| 欧美一级久久久| 亚洲制服丝袜一区| 97se亚洲国产综合自在线观| 国产婷婷色一区二区三区| 亚洲国产综合在线| 成人免费福利片| 久久综合久久综合亚洲| 天天免费综合色| 一本大道久久精品懂色aⅴ| 国产午夜精品久久| 国产又黄又大久久| 久久综合av免费| 青青草原综合久久大伊人精品优势| 在线日韩av片| 一二三区精品视频| 色老头久久综合| 亚洲综合免费观看高清完整版在线| 成人av在线播放网址| 国产免费久久精品| 国产电影一区二区三区| 国产调教视频一区| 成人动漫视频在线| ...av二区三区久久精品| 成人免费观看视频| 自拍偷拍欧美精品| 在线一区二区观看| 亚洲一区二区精品3399| 欧美三级电影网| 日韩精品成人一区二区三区| 这里只有精品电影| 久久国产夜色精品鲁鲁99| 欧美成人性战久久| 国产91精品露脸国语对白| 中文在线一区二区| 色诱亚洲精品久久久久久| 亚洲一二三级电影| 3d动漫精品啪啪一区二区竹菊| 麻豆精品国产91久久久久久| 欧美精品一区二区三区蜜桃视频| 韩国av一区二区| 亚洲欧美一区二区三区孕妇| 欧美视频在线播放| 日韩电影免费一区| 久久久精品天堂| 91美女在线看| 亚洲超碰精品一区二区| 久久久亚洲国产美女国产盗摄| 成人国产精品免费观看| 亚洲一区二区三区在线播放| 欧美大尺度电影在线| 成人av电影观看| 天堂在线亚洲视频| 国产区在线观看成人精品| 色久综合一二码| 裸体一区二区三区| 国产精品免费网站在线观看| 欧美日韩二区三区| 国产精品系列在线观看| 亚洲国产成人porn| 欧美激情一二三区| 欧美日韩一级大片网址| 国产精品一区二区久久精品爱涩| 亚洲日本乱码在线观看| 日韩精品专区在线影院观看| 99在线精品视频| 日韩不卡手机在线v区| 综合久久一区二区三区| 精品sm在线观看| 欧美性三三影院| 国产福利91精品一区二区三区| 日韩影院免费视频| 日韩伦理av电影| 久久夜色精品国产噜噜av | 久久精品国产成人一区二区三区| 国产精品欧美一级免费| 精品国产乱码久久久久久浪潮| 色香蕉久久蜜桃| 国产成人一区二区精品非洲| 日韩av一区二区三区四区| 亚洲欧美另类小说视频| 日本一区二区三区国色天香 | 91精品久久久久久久久99蜜臂| av亚洲精华国产精华精华| 韩国成人在线视频| 丝袜诱惑制服诱惑色一区在线观看| 一区免费观看视频| 国产精品系列在线| 精品国产乱码久久| 欧美一区二区三区喷汁尤物| 欧美日韩不卡一区| 日本韩国欧美一区| 色综合久久综合网97色综合 | 亚洲午夜久久久| 亚洲欧美日本在线| 亚洲精品国产视频| 亚洲丝袜另类动漫二区| 国产精品久久久99| 国产精品久久久久久久久久免费看| www亚洲一区| 久久亚洲一区二区三区四区| 欧美精品一区二区三区蜜桃视频| 欧美成人伊人久久综合网| 日韩美女天天操| 久久影视一区二区| 中文在线一区二区 | 欧美性videosxxxxx| 91久久精品一区二区| 色噜噜狠狠成人网p站| 欧美日韩一区二区三区免费看| 欧美午夜精品一区二区蜜桃| 欧美日韩国产小视频在线观看| 欧美亚洲综合另类| 欧美日韩一级二级三级| 日韩区在线观看| 久久精品视频在线免费观看| 国产精品少妇自拍| 亚洲视频资源在线| 亚洲成人av一区二区三区| 轻轻草成人在线| 国产成人啪午夜精品网站男同| eeuss鲁一区二区三区| 91国偷自产一区二区使用方法| 欧美日韩国产三级| 久久综合五月天婷婷伊人| 中文字幕一区三区| 亚洲高清久久久| 激情综合色播激情啊| av中文字幕在线不卡| 欧美日韩久久久| 欧美精品一区二区三区高清aⅴ| 欧美极品少妇xxxxⅹ高跟鞋 | 国产伦精品一区二区三区免费| 成人一区二区三区视频在线观看| 一本到高清视频免费精品| 日韩欧美国产午夜精品| 国产精品国产自产拍高清av王其| 亚洲一卡二卡三卡四卡五卡| 久久99国产精品尤物| 91蜜桃视频在线| 日韩欧美一区中文| 亚洲精选视频在线| 国产在线一区二区综合免费视频| 91在线视频网址| 欧美大肚乱孕交hd孕妇|