fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/time.h>
  4. #include <sys/types.h>
  5. #include <unistd.h>
  6.  
  7. #define MAP_X 20
  8. #define MAP_Y 20
  9. #define SNAKE_MAX MAP_X*MAP_Y
  10.  
  11. int snake_x[SNAKE_MAX];
  12. int snake_y[SNAKE_MAX];
  13. int snake_head=0;
  14. int snake_tail=0;
  15. int snake_dir=0;
  16.  
  17. char map[MAP_Y][MAP_X];
  18.  
  19. void init(){
  20. int i,j;
  21. for(i=0;i<MAP_Y;i++)for(j=0;j<MAP_X;j++)map[i][j]='-';
  22. for(i=0;i<MAP_Y;i++)map[i][0]=map[i][MAP_X-1]='@';
  23. for(i=0;i<MAP_X;i++)map[0][i]=map[MAP_Y-1][i]='@';
  24. snake_head=0;
  25. snake_tail=0;
  26. snake_x[0]=MAP_X/2;
  27. snake_y[0]=MAP_Y/2;
  28. snake_dir=0;
  29. map[MAP_Y/2][MAP_X/2]='@';
  30. }
  31.  
  32. void print_map(){
  33. int i,j;
  34. for(i=0;i<MAP_Y;i++){
  35. for(j=0;j<MAP_X;j++)printf("%c",map[i][j]);
  36. printf("\n");
  37. }
  38. }
  39.  
  40. int step_snake(int grow){
  41. static const int dir_d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
  42. int pre_head,next_x,next_y;
  43. pre_head = snake_head;
  44. snake_head++;
  45. snake_head%=SNAKE_MAX;
  46. snake_x[snake_head]=next_x=(snake_x[pre_head]+dir_d[snake_dir][1])%MAP_X;
  47. snake_y[snake_head]=next_y=(snake_y[pre_head]+dir_d[snake_dir][0])%MAP_Y;
  48. if(map[next_y][next_x]=='@'){
  49. return -1;
  50. }
  51. map[next_y][next_x]='@';
  52. if(!grow){
  53. map[snake_y[snake_tail]][snake_x[snake_tail]]=' ';
  54. snake_tail++;
  55. snake_tail%=SNAKE_MAX;
  56. }
  57. return 0;
  58. }
  59.  
  60. void change_dir(int dir){
  61. if( 0<=dir && dir<=3 && (dir+2)%4!=snake_dir ){
  62. snake_dir=dir;
  63. }
  64. }
  65.  
  66. int wait_input(){
  67. fd_set rfds;
  68. struct timeval tv;
  69. int retval;
  70. char buf[10];
  71. int ret = -1;
  72.  
  73. FD_ZERO(&rfds);
  74. FD_SET(0, &rfds);
  75.  
  76. /* 1 秒間監視する。*/
  77. tv.tv_sec = 1;
  78. tv.tv_usec = 0;
  79.  
  80. retval = select(1, &rfds, NULL, NULL, &tv);
  81.  
  82. if (retval == -1){
  83. perror("select()");
  84. }else if (retval){
  85. read(0,buf,10);
  86. switch(buf[0]){
  87. case 'a':
  88. ret=2;
  89. break;
  90. case 's':
  91. ret=1;
  92. break;
  93. case 'd':
  94. ret=0;
  95. break;
  96. case 'w':
  97. ret=3;
  98. break;
  99. }
  100. }
  101. return ret;
  102. }
  103.  
  104. int main(){
  105. int input;
  106. int game = 0;
  107. int turn = 0;
  108. init();
  109. while(game>=0){
  110. printf("turn %d\n",turn);
  111. print_map();
  112. input = wait_input();
  113. change_dir(input);
  114. game = step_snake(turn%4==0);
  115. turn++;
  116. }
  117. return 0;
  118. }
Success #stdin #stdout 0s 2052KB
stdin
Standard input is empty
stdout
turn 0
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------@--------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 1
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------@@-------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 2
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@--------- @@------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 3
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------  @@-----@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 4
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------   @@----@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 5
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------   @@@---@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 6
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------    @@@--@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 7
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------     @@@-@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@
turn 8
@@@@@@@@@@@@@@@@@@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@---------      @@@@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@------------------@
@@@@@@@@@@@@@@@@@@@@