青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Networking /C++/Linux

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  11 Posts :: 14 Stories :: 1 Comments :: 0 Trackbacks

常用鏈接

留言簿(4)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

轉自:http://bbs.chinaunix.net/viewthread.php?tid=1170202&extra=page%3D1%26amp%3Bfilter%3Ddigest  

1
 /***snake.c***/
  2 #include <stdio.h>
  3 #include <malloc.h>
  4 #include <sys/time.h>
  5 #include <sys/types.h>
  6 #include <sys/select.h>
  7 #include <termio.h>
  8 #include <fcntl.h>
  9 
 10 #define SNAKE_INITX 5
 11 #define SNAKE_INITY 5
 12 #define SNAKE_SHAPE '*'
 13 #define SNAKE_INITLEN 8
 14 
 15 #define WIN_X1 1
 16 #define WIN_X2 80
 17 #define WIN_Y1 1
 18 #define WIN_Y2 24
 19 
 20 #define MAX_LEVEL 20
 21 #define MAX_INTER 200000
 22 #define MIN_INTER 0
 23 #define MAX_RICH 10
 24 #define DEVRATE 5
 25 #define OVER "Game Over!!!"
 26 
 27 struct stNode
 28 {
 29         int x;
 30         int y;
 31         char shape;
 32         struct stNode *next;
 33 };
 34 
 35 struct stFood
 36 {
 37         int x;
 38         int y;
 39 };
 40 
 41 struct stNode *gpstHead,*gpstTail;
 42 struct stFood gastFood[MAX_RICH];
 43 int giLevel=1;
 44 int giRich=1;
 45 int giScore=0;
 46 int giLen=0;
 47 
 48 void settty(int iFlag)
 49 {
 50         int fd;
 51         struct termio stTerm;
 52 
 53         if((fd = open(ttyname(1),O_RDWR))==-1)        return;
 54         if(iFlag == 1)
 55         {
 56                 ioctl(fd,TCGETA,&stTerm);
 57                 stTerm.c_lflag &= ~ICANON;
 58                 stTerm.c_lflag &= ~ECHO;
 59                 stTerm.c_cc[4] = 1;
 60                 stTerm.c_cc[5] = 0;
 61                 stTerm.c_iflag &= ~ISTRIP;
 62                 stTerm.c_cflag |= CS8;
 63                 stTerm.c_cflag &= ~PARENB;
 64                 ioctl(fd,TCSETA,&stTerm);
 65         }
 66         else
 67         {
 68                 ioctl(fd,TCGETA,&stTerm);
 69                 stTerm.c_lflag |= ICANON;
 70                 stTerm.c_lflag |= ECHO;
 71                 stTerm.c_cc[4] = 4;
 72                 stTerm.c_cc[5] = 5;
 73                 stTerm.c_iflag &= ~ISTRIP;
 74                 stTerm.c_cflag |= CS8;
 75                 stTerm.c_cflag &= ~PARENB;
 76                 ioctl(fd,TCSETA,&stTerm);
 77         }
 78         close(fd);
 79 }
 80 
 81 void vDrawOneNode(struct stNode *pstNode,int iFlag)
 82 {
 83         printf("\033[%dm\033[40;%dm\033[%d;%d;H%c",
 84                 iFlag,iFlag*3+30,pstNode->y,pstNode->x,pstNode->shape);
 85         fflush(stdout);
 86 }
 87 
 88 void vDrawOneFood(int x,int y)
 89 {
 90         printf("\033[1m\033[40;36m\033[%d;%d;H%c",y,x,'@');
 91         fflush(stdout);
 92 }
 93 
 94 int iGetDir(int iOriDir)
 95 {
 96         fd_set rset;
 97         struct        timeval        hTmo;
 98         int iRet,iFlag=0;
 99         char cCh;
100 
101         FD_ZERO(&rset);
102         FD_SET(0,&rset);
103         hTmo.tv_sec=0;
104         hTmo.tv_usec=MAX_INTER-(MAX_INTER-MIN_INTER)/MAX_LEVEL*giLevel;
105 
106         iRet=select(1,&rset,NULL,NULL,&hTmo);
107         if(iRet<=0)
108         {
109                 return(iOriDir);
110         }
111         for(;;)
112         {
113                 cCh=getchar();
114                 if(cCh != -1)
115                 {
116                         switch(cCh)
117                         {         
118                         case 27  :
119                         case 91  :
120                                 iFlag++;
121                                 break;
122                         case 65  ://UP
123                         case 66 ://DOWN
124                         case 67  ://RIGHT
125                         case 68 ://LEFT
126                         if(iFlag==2)
127                                 return((!((cCh-0x41)^iOriDir^1))^(cCh-0x41));
128                         default  :
129                                 return(iOriDir);
130                         }
131                 }
132         }
133 }
134 void vInitScreen()
135 {
136         settty(1);
137         printf("\033[?25l\033[2J");
138 }
139 
140 void vRestoreScreen()
141 {
142         printf("\033[24;1H\033[1m\033[40;34m\033[?25h");
143         settty(0);
144 }
145 
146 void vDrawScope()
147 {
148         int i,j;
149         
150         for(j=WIN_Y1;j<=WIN_Y2;j+=WIN_Y2-WIN_Y1)
151         {
152                 printf("\033[%d;%dH+",j,WIN_X1);
153                 for(i=WIN_X1+1;i<WIN_X2;i++)
154                         printf("-");
155                 printf("+");
156         }
157         for(i=WIN_Y1+1;i<WIN_Y2;i++)
158                 printf("\033[%d;%dH|%*c|\n",i,WIN_X1,WIN_X2-WIN_X1-1,' ');
159 }
160 
161 void vCreateSnake()
162 {
163         struct stNode *pstNew;
164         int i;
165 
166         gpstHead=(struct stNode*)malloc(sizeof(struct stNode));
167         gpstHead->x=SNAKE_INITX;        
168         gpstHead->y=SNAKE_INITY;
169         gpstHead->shape=SNAKE_SHAPE;
170         gpstHead->next=NULL;
171         vDrawOneNode(gpstHead,1);
172         gpstTail=gpstHead;
173         for(i=1;i<SNAKE_INITLEN;i++)
174         {
175                 pstNew=(struct stNode*)malloc(sizeof(struct stNode));
176                 pstNew->x=gpstHead->x+1;        
177                 pstNew->y=gpstHead->y;
178                 pstNew->shape=SNAKE_SHAPE;
179                 pstNew->next=NULL;
180                 vDrawOneNode(pstNew,1);
181                 gpstHead->next=pstNew;
182                 gpstHead=pstNew;
183         }
184         return;
185 }
186 
187 void vKillSnake()
188 {
189         struct stNode *pstNode;
190 
191         for(pstNode=gpstTail;gpstTail!=NULL;)
192         {
193                 gpstTail=pstNode->next;
194                 free(pstNode);
195                 pstNode=gpstTail;
196         }
197 }
198 
199 void vGenFood(int iIdx)
200 {
201         struct stNode *pstNode;
202         int i,iFound=0;
203         
204         for(;!iFound;)
205         {
206                 iFound=1;
207                 gastFood[iIdx].x=rand()%(WIN_X2-WIN_X1-1)+WIN_X1+1;
208                 gastFood[iIdx].y=rand()%(WIN_Y2-WIN_Y1-1)+WIN_Y1+1;
209                 for(i=0;i<giRich;i++)
210                 {
211                         if(i!=iIdx && gastFood[iIdx].x==gastFood[i].x &&
212                                 gastFood[iIdx].y==gastFood[i].y)
213                         {
214                                 iFound=0;
215                                 break;
216                         }
217                 }
218                 if(!iFound) continue;
219                 for(pstNode=gpstTail;pstNode!=NULL;pstNode=pstNode->next)
220                 {
221                         if(gastFood[iIdx].x==pstNode->x &&
222                                 gastFood[iIdx].y==pstNode->y)
223                         {
224                                 iFound=0;
225                                 break;
226                         }
227                 }
228                 if(!iFound) continue;
229         }
230         vDrawOneFood(gastFood[iIdx].x,gastFood[iIdx].y);
231 }
232 
233 void vInitFood()
234 {
235         int i;
236         
237         srand(getpid());
238         for(i=0;i<giRich;i++)        vGenFood(i);
239 }
240         
241 int iIsValid(int x,int y)
242 {
243         struct stNode *pstNode;
244 
245         if(x<=WIN_X1 || x>=WIN_X2 || y<=WIN_Y1 || y>=WIN_Y2)
246                 return(0);
247         pstNode=gpstTail;
248         for(;pstNode!=NULL;)
249         {
250                 if(x==pstNode->x && y==pstNode->y)
251                         return(0);
252                 pstNode=pstNode->next;
253         }
254         return(1);
255 }
256 
257 int iEat(int x,int y)
258 {
259         int i,j;
260         
261         for(i=0;i<giRich;i++)
262         {
263                 if(x==gastFood[i].x && y==gastFood[i].y)
264                 {
265                         vGenFood(i);
266                         giScore+=giLevel*10;
267                         giLen++;
268                         if(giLevel<MAX_LEVEL)
269                                 if(giLen%DEVRATE==0)
270                                         giLevel++;
271                         return(1);
272                 }
273         }
274         return(0);
275 }
276 main()
277 {
278         int iDir=2,iNextX,iNextY;
279         struct stNode *pstNew;
280         char sPrompt[80];
281         
282         vInitScreen();
283         vDrawScope();
284         vCreateSnake();
285         vInitFood();
286         for(;;)
287         {
288                 iDir=iGetDir(iDir);
289                 iNextX=gpstHead->x+(iDir>>1)*(5-(iDir<<1));
290                 iNextY=gpstHead->y-(!(iDir>>1))*(1-(iDir<<1));
291                 if(!iIsValid(iNextX,iNextY))
292                 {
293                         printf("\033[%d;%dH\033[1m\033[40;34m%s\033[0m",
294                                 WIN_Y2-1,(WIN_X1+WIN_X2)/2-strlen(OVER)/2,OVER);
295                         break;
296                 }
297                 pstNew=(struct stNode*)malloc(sizeof(struct stNode));
298                 pstNew->x=iNextX;
299                 pstNew->y=iNextY;
300                 pstNew->shape=SNAKE_SHAPE;
301                 pstNew->next=NULL;
302                 gpstHead->next=pstNew;
303                 gpstHead=pstNew;
304                 vDrawOneNode(gpstHead,1);
305                 if(!iEat(iNextX,iNextY))
306                 {
307                         vDrawOneNode(gpstHead,1);
308                         vDrawOneNode(gpstTail,0);
309                         pstNew=gpstTail;
310                         gpstTail=pstNew->next;
311                         free(pstNew);
312                 }
313                 sprintf(sPrompt,"Score:%7d Level:%2d",giScore,giLevel);
314                 printf("\033[%d;%dH\033[1m\033[40;34m%s\033[0m",
315                         WIN_Y2,(WIN_X1+WIN_X2)/2-strlen(sPrompt)/2,sPrompt);
316         }
317         vKillSnake();
318         vRestoreScreen();
319 }
posted on 2011-12-03 21:55 likun 閱讀(577) 評論(0)  編輯 收藏 引用 所屬分類: Algorithms
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线亚洲一区二区| 久久精品国产清高在天天线| 亚洲免费中文| 亚洲视频1区| 亚洲一区二区欧美| 一区二区三区国产在线| 亚洲韩国日本中文字幕| 久久日韩粉嫩一区二区三区 | 91久久精品国产91久久性色tv| 欧美国产在线电影| 宅男噜噜噜66一区二区66| 日韩亚洲欧美综合| 欧美一区午夜视频在线观看| 美腿丝袜亚洲色图| 久久99伊人| 久久婷婷综合激情| 亚洲人www| 久久资源av| 国产自产精品| 亚洲欧美综合一区| 欧美日韩一区二区在线视频| 国产一区二区三区免费在线观看| 亚洲高清久久久| 你懂的网址国产 欧美| 新67194成人永久网站| 亚洲电影网站| 亚洲欧美日韩一区二区在线 | 亚洲区一区二| 日韩视频在线一区| 一色屋精品视频免费看| 欧美一区二区三区电影在线观看| 一区二区三区黄色| 亚洲一区美女视频在线观看免费| 黄色亚洲免费| 国产综合一区二区| 一区二区三区日韩欧美| 欧美不卡视频一区发布| 亚洲精品久久久久中文字幕欢迎你 | 欧美尤物一区| 国产精品成人免费| 亚洲欧洲一二三| 久久一综合视频| 午夜亚洲福利在线老司机| 欧美电影免费观看大全| 黄网站免费久久| 久久精品人人做人人综合| 午夜欧美大尺度福利影院在线看 | 亚洲精品1234| 久久av免费一区| 国产精品国产三级国产| 欧美在线free| 欧美一区影院| 日韩一级片网址| 性做久久久久久免费观看欧美| 国产欧美日韩免费看aⅴ视频| 午夜精品av| 麻豆av一区二区三区| 亚洲欧美日韩国产一区二区| 欧美在线啊v| 一区二区av| 久久免费的精品国产v∧| 亚洲精品国产精品乱码不99按摩| 在线亚洲电影| 亚洲激情小视频| 久久精品二区三区| 亚洲欧美综合国产精品一区| 久久精品视频va| 午夜免费在线观看精品视频| 男女av一区三区二区色多| 亚洲一区二区精品在线| 免费成人黄色av| 久久精品夜色噜噜亚洲a∨ | 亚洲国产精品嫩草影院| 亚洲人成毛片在线播放| 精品动漫3d一区二区三区免费版| 一区二区免费在线视频| 日韩视频三区| 欧美国产一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲欧美精品在线| 欧美精品 国产精品| 亚洲福利国产| 亚洲一区免费视频| 国产欧美日韩中文字幕在线| 午夜国产精品影院在线观看| 香蕉免费一区二区三区在线观看| 亚洲久久成人| 久久久噜噜噜久久人人看| 亚洲国产片色| 麻豆精品视频| 午夜精彩国产免费不卡不顿大片| 亚洲美女色禁图| 亚洲精品一区二区三区不| 伊人久久综合97精品| 国产精品三上| 国产一本一道久久香蕉| 好吊色欧美一区二区三区四区| 欧美第一黄网免费网站| 午夜精品久久久久久久99水蜜桃| 亚洲精品日韩综合观看成人91| 亚洲丰满少妇videoshd| 欧美成人精品在线观看| 亚洲中午字幕| 一区二区三区视频在线| 99精品视频免费在线观看| 亚洲人成小说网站色在线| 国产日韩欧美| 国产日韩亚洲| 亚洲第一综合天堂另类专| 亚洲一区免费在线观看| 亚洲卡通欧美制服中文| 日韩视频在线观看一区二区| 亚洲视频一区| 亚洲视频国产视频| 亚洲午夜精品一区二区三区他趣| 国产精品99久久99久久久二8 | 一区二区三区免费在线观看| 国内精品伊人久久久久av一坑| 国产精品免费视频xxxx| 国产精品久久久久久久app| 国产日韩精品一区二区三区在线| 国产乱码精品| 亚洲激情第一页| 日韩视频在线观看免费| 午夜日韩在线| 女女同性精品视频| 日韩亚洲欧美一区| 久久免费高清| 国产精品www| 99国产精品国产精品久久| 久久日韩精品| 欧美一级久久| 国产一区二区三区免费在线观看 | 亚洲日本成人女熟在线观看| 99精品欧美一区二区三区综合在线| 亚洲欧美日韩视频一区| 欧美日韩久久不卡| 狠狠久久综合婷婷不卡| 久久久久久久高潮| 一区二区三区欧美成人| 欧美日韩在线视频首页| 亚洲精品国产拍免费91在线| 欧美国产在线观看| 小黄鸭精品aⅴ导航网站入口| 卡一卡二国产精品| 一区二区三区精品国产| 国产精品国产三级国产专播品爱网 | 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美国产视频一区二区| 欧美精品日韩www.p站| 亚洲摸下面视频| 久久久九九九九| 宅男噜噜噜66一区二区| 翔田千里一区二区| 99热精品在线观看| 亚洲茄子视频| 亚洲在线播放| 欧美在线视频免费播放| 欧美大片va欧美在线播放| 亚洲伊人观看| 先锋亚洲精品| 亚洲第一综合天堂另类专| 午夜精品亚洲| 欧美午夜www高清视频| 在线精品一区二区| 欧美一区二区大片| 欧美高清自拍一区| 一区二区三区四区五区精品视频| 亚洲夜晚福利在线观看| 国产精品扒开腿做爽爽爽视频 | 亚洲电影网站| 亚洲日本精品国产第一区| 亚洲午夜小视频| 亚洲精品国产精品国自产观看浪潮| 亚洲女女女同性video| 男男成人高潮片免费网站| 国产一区二区三区日韩| 亚洲一区在线免费观看| 欧美成人精品一区二区三区| 久久久国产精品亚洲一区| 夜夜嗨av一区二区三区四区| 国产精品日韩在线一区| 美女视频一区免费观看| 美女黄网久久| 伊人久久大香线蕉综合热线| 久久久久9999亚洲精品| 亚洲人成啪啪网站| 亚洲美女区一区| 亚洲综合视频1区| 国产精品久久毛片a| 亚洲精品美女免费| 亚洲一区在线观看视频| 久久亚洲国产精品日日av夜夜| 欧美日韩精品免费看| 亚洲免费影院| 欧美一区二区三区四区在线观看 | 欧美专区福利在线| 91久久综合| 久久久久久久久久久久久久一区| 久久精品视频免费播放|