Greedering snake (text mode)
/ ******************************************************* / / * program name: Snake 1.1 (text mode) * // * author: Knocker * // * completion date: 2004.10.20 * * // compiler environment: Windows me Win-TC 1.9.1 * // * Email : knocker.k@163.com * // * Program Description: There are two kinds of death, one: snake first is confusing * // * 2: Bite to his tail * // * arrow keys Control the snake direction * / / * Modification Description: 2004.10.21 Optimized Print_Mop () * // ********************************************************* ************ / # include
#define maxx 76 # Define Maxy 22
Void EXITT (); Void MoveAdd (int * a, int * x, int * y); void findend (int x, int y); void rand_mop ();
INT x = 0, y = 1, x1 = 0, y1 = 0, A = 2; / * x, Y snake head in array subscript, a represents the direction of movement of the snake, 0, 1, 2, 3, respectively mark the snake In the direction of movement, right, lower, left * / int end = 5, endy0 = 5; int T = 1; / * Food generation control flag * / char mop [MAXY] [MAXX] = {0}; int Main () {Char C; union regs regs;
Regs.h.ah = 1; regs.h.ch = 13; regs.h.cl = 0; INT86 (0x10, & regs, & regs);
MOP [0] [0] = - 1; / * - 1 Mark Snake Tail * / MOP [0] [1] = 4; Rand_Have (); while (1) {while (Bioskey (1) == 0) {x1 = X, Y1 = Y; MOVEADD (& A, & X, & Y); Print_Mop (); if (t == 0) Rand_have (), T = 1; DELAY (3500);} c = bioskey (0) >> 8 ; If (c == 75) a = 3; if (c == 77) a = 1; if (c == 72) a = 0; IF (c == 80) a = 2;}} void moveadd INT * a, INT * X, INT * Y) {INT TMEP;
IF (* a == 0) IF (* x-1> = 0 && (! mop [* x-1] [* y] || mop [* x-1] [* y] == 10 || MOP [ * X-1] [* y] == - 1) {IF (MOP [* x-1] [* y] == - 1) exitt (); if (mop [* x-1] [* y ]! = 10) Findend (* x, * y); ELSE T = 0; MOP [* x-1] [* y] = (* a 2)% 4 1; * x = * X-1; } Else * a = rand ()% 2? 3: 1; if (* a == 2) IF (* x 1 IF (* a == 1) if (* y 1 IF (* a == 3) IF (* y-1> = 0 && (! mop [* x] [* Y-1] || mop [* x] [* Y-1] == 10 || MOP [ * X] [* Y-1] == - 1)) {IF (MOP [* x] [* Y-1] == - 1) exitt (); if (MOP [* x] [* Y-1 ]! = 10) Findend (* x, * y); ELSE T = 0; MOP [* x] [* Y-1] = (* a 2)% 4 1; * y = * Y-1; } Else * a = rand ()% 2? 2: 0;} void findend (int x, int y) {switch (mop [x] [y] -1) {case 0: IF (MOP [X-1] [y] == - 1) {mop [x-1] [y] = 0; ENDX0 = X-1; ENDY0 = Y; MOP [x] [y] = - 1;} else Findend (x-1, Y); Break; Case 1: IF (MOP [x] == - 1) {mop [x] [y 1] = 0; ENDX0 = X; Endy0 = Y 1; MOP [x ] [y] = - 1;} else findend (x, y 1); Break; case 2: IF (MOP [x 1] [y] == - 1) {mop [x 1] [y] = 0; ENDX0 = x 1; Endy0 = Y; MOP [x] [y] = - 1;} else Findend (x 1, y); Break; case 3: IF (MOP [x] [Y-1 ] == - 1) {MOP [x] [Y-1] = 0; ENDX0 = X; ENDY0 = Y-1; MOP [x] [y] = - 1;} else findend (x, y-1); break;}} void rand_have ()}} void rand_have ()}}} void rand_have () {Int x, y; QQ: x = RAND ()% MAXY; Y = rand ()% maxX; if (MOP [x] [y] == 0) {mop [x] [y] = 10; gotoxy (y 1, x 2); printf ("X");} else goto qq;} void print_mop () {