1.蛇向右移动
1 #include<curses.h>
2 #include<stdlib.h>
3
4 struct NodeofSnake
5 {
6 int hang;
7 int lie;
8 struct NodeofSnake *next;
9 };
10
11 struct NodeofSnake *head=NULL;
12 struct NodeofSnake *tail=NULL;
13
14 void addNode()
15 {
16 struct NodeofSnake *new;
17 new=(struct NodeofSnake*)malloc(sizeof(struct NodeofSnake));
18 new->hang=tail->hang;
19 new->lie =tail->lie+1;
20 new->next=NULL;
21
22 tail->next=new;
23 tail=new;
24 }
25 void initSnake()
26 {
27 // struct NodeofSnake *head,*tail;
28 head=(struct NodeofSnake*)malloc(sizeof(struct NodeofSnake));
29 head->hang=2;
30 head->lie =2;
31 head->next=NULL;
32
33 tail=head;
34
35 addNode();
36 addNode();
37 addNode();
38 }
39 int wheatherOfSnakeNode(int hang,int lie)
40 {
41
42 struct NodeofSnake *point = head;
43 while(point!=NULL){
44 if(hang==point->hang && lie==point->lie ){
45 printw("[]");
46 return 1;
47 }
48 point=point->next;
49 }
50 return 0;
51 }
52
53 void initMap()
54 {
55 int hang=0;
56 int lie =0;
57 move(0,0);
58
59 for(hang=0;hang<=20;hang++){
60 if(hang==0||hang==20){
61 for(lie=0;lie<20;lie++){
62 printw("--");
63 }
64 printw("\n");
65 }
66 if(hang>0&&hang<=19){
67 for(lie=0;lie<=20;lie++){
68 if(lie==0||lie==20){
69 printw("|");
70 }else if(wheatherOfSnakeNode(hang,lie)){
71 }
72 else{
73 printw(" ");
74 }
75 }
76 printw("\n");
77 }
78 }
79 printw("By:GuoMing\n");
80 }
81 void deleteNode()
82 {
83 struct NodeofSnake *point = head;
84 head=head->next;
85 free(point);
86 }
87 void snakeMove()
88 {
89 addNode();
90 deleteNode();
91 }
92 int main()
93 {
94 int key;
95 initscr();
96 keypad(stdscr,1);
97
98 initSnake();
99 initMap();
100
101 while(1){
102 key=getch();
103 if(key==KEY_RIGHT){
104 snakeMove();
105 initMap();
106 }
107 }
108
109 // initSnake();
110 // initMap();
111
112 getch();
113 endwin();
114
115 return 0;
116 }
2.蛇撞墙而死
1 #include<curses.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4
5 struct NodeofSnake
6 {
7 int hang;
8 int lie;
9 struct NodeofSnake *next;
10 };
11
12 struct NodeofSnake *head=NULL;
13 struct NodeofSnake *tail=NULL;
14
15 void addNode()
16 {
17 struct NodeofSnake *new;
18 new=(struct NodeofSnake*)malloc(sizeof(struct NodeofSnake));
19 new->hang=tail->hang;
20 new->lie =tail->lie+1;
21 new->next=NULL;
22
23 tail->next=new;
24 tail=new;
25}
26 void initSnake()
27 {
28 struct NodeofSnake *point =head;
29 if(point!=NULL){
30 head=head->next;
31 free(point);
32 }
33 head=(struct NodeofSnake*)malloc(sizeof(struct NodeofSnake));
34 head->hang=2;
35 head->lie =2;
36 head->next=NULL;
37
38 tail=head;
39
40 addNode();
41 addNode();
42 addNode();
43 }
44 int wheatherOfSnakeNode(int hang,int lie)
45 {
46
47 struct NodeofSnake *point = head;
48 while(point!=NULL){
49 if(hang==point->hang && lie==point->lie ){
50 printw("[]");
51 return 1;
52 }
53 point=point->next;
54 }
55 return 0;
56 }
57
58 void initMap()
59 {
60 int hang=0;
61 int lie =0;
62 move(0,0);
63
64 for(hang=0;hang<=20;hang++){
65 if(hang==0||hang==20){
66 for(lie=0;lie<20;lie++){
67 printw("--");
68 }
69 printw("\n");
70 }
71 if(hang>0&&hang<=19){
72 for(lie=0;lie<=20;lie++){
73 if(lie==0||lie==20){
74 printw("|");
75 }else if(wheatherOfSnakeNode(hang,lie)){
76 }
77 else{
78 printw(" ");
79 }
80 }
81 printw("\n");
82 }
83 }
84 printw("By:GuoMing\n");
85 }
86 void deleteNode()
87 {
88 struct NodeofSnake *point = head;
89 head=head->next;
90 free(point);
91 }
92 void snakeMove()
93 {
94 addNode();
95 deleteNode();
96 if(tail->lie==20 ||tail->lie==0 ||tail->hang==0 ||tail->hang==20 ){
97 initSnake();
98 }
99 }
100 int main()101 {
102 int key;
103 initscr();
104 keypad(stdscr,1);
105
106 initSnake();
107 initMap();
108
109 while(1){
110 key=getch();
111 if(key==KEY_RIGHT){
112 snakeMove();
113 initMap();
114 }
115 }
116
117 // initSnake();
118 // initMap();
119
120 getch();
121 endwin();
122
123 return 0;
124 }
3.蛇向右自行移动
在这里就不检测键盘响应反应了,目的让蛇一直向右移动。
只修改main函数中while(1)中内容