tt追着太阳走
我喜欢向日葵,它让我觉得生活温暖,明快,充满爱 我喜欢华丽的歌剧音乐剧,平静的生活要用些许的高贵填充 我喜欢认真地一丝不苟地生活,只有生活的有心人才能获得心灵的丰收 ——tt:)
posts - 9,  comments - 49,  trackbacks - 0

给同学写了一个vc6.0的C语言的控制台贪食蛇,做练习用的。没什么意思,又丑又没成就感。话说,用控制台写比用OpenGL写还麻烦。想当年我没几分钟就写完了,现在竟然写了一个半小时,水平大不如从前了,要好好加油才行。

http://files.cnblogs.com/PureMilk/SnakeWithC.rar

这几天有点自信心过度膨胀的状态,主要是写车牌识别写的手感太好了。不知道做完这个项目,是不是可以找一份不错的工作。忽然觉得工作也是没什么意思的事情,无非就是有钱拿。工作真的只是为了赚钱吗?我想我还是希望自己是个有用的人。可是这样就是个有用的人了吗?应该不是的吧。那,有用是开心的吗?我不知道。现在的我,还是很想赚钱的,恩。不知道等一切我想要的都要到了,我该做什么呢。也许再不会有什么可以让自己很有活力的事情,每天只要简单的,满足的就好了吧。

把源码贴上来吧。

 

#include <stdio.h>
#include 
<stdlib.h>
#include 
<conio.h>
#include 
<time.h>
#include 
<windows.h>

enum block{
    BLANK 
= 0, FOOD, SNAKE, HEAD
};

int snake[800][2= {0};
int len = 0;
int food[2= {0};
enum block map[20][80= {HEAD};
int gameOver = 0;

void CreatFood( void )
{
    
int flag = 1;
    
int i;
    
while( flag == 1 )
    {
        flag 
= 0;
        food[
0= rand()%80;
        food[
1= rand()%20;
        printf( 
"%d,%d\n", food[0], food[1] );
        
for ( i = 0; i < len; ++i )
        {
            
if ( snake[i][0== food[0&& snake[i][1== food[1] )
            {
                flag 
= 1;
            }
        }
    }
}

void Init( void )
{
    
int i;
    
//初始化蛇
    len = 3;
    
for ( i = 0; i < len; ++i )
    {
        snake[i][
0= len-i;
    }
    
//初始化食物
    CreatFood();
}

void Draw( void )
{
    
int i,j;

    
for ( i = 0; i < 20++i )
    {
        
for ( j = 0; j < 80++j )
        {
            map[i][j] 
= BLANK;
        }
    }
    
//把蛇画到map里
    map[snake[0][1]][snake[0][0]] = HEAD;
    
for ( i = 1; i < len; ++i )
    {
        map[snake[i][
1]][snake[i][0]] = SNAKE;
    }
    
//把食物画到map里
    map[food[1]][food[0]] = FOOD;
    system( 
"cls" );
//    printf( "%d,%d\n", food[0], food[1] );
    for ( i = 0; i < 20++i )
    {
        
for ( j = 0; j < 80++j )
        {
            
switch ( map[i][j] )
            {
            
case BLANK:
                putchar(
' ');
                
break;
            
case FOOD:
                putchar(
'$');
                
break;
            
case SNAKE:
                putchar(
'*');
                
break;
            
case HEAD:
                putchar(
'@');
                
break;
            
default:
                
break;
            }
        }
    }
}

int Eat( void )
{
    
if ( snake[0][0== food[0&& snake[0][1== food[1] )
    {
        
return 1;
    }
    
return 0;
}

int Die( void )
{
    
int i;
    
//撞边界死
    if ( snake[0][0< 0 || snake[0][0> 80 )
    {
        
return 1;
    }
    
if ( snake[0][1< 0 || snake[0][1> 20 )
    {
        
return 1;
    }
    
//撞自己死
    for ( i = 1; i < len; ++i )
    {
        
if ( snake[i][0== snake[0][0&& snake[i][1== snake[0][1] )
        {
            
return 1;
        }
    }
    
return 0;
}

void Move( char key )
{
    
int x, y;
    
int pos = 0;
    
int i;
    
int d[4][2= {
        {
0,-1},
        {
-1,0},
        {
0,1},
        {
1,0},
    };
    
switch ( key )
    {
    
case 'w':
        pos 
= 0;
        
break;
    
case 'a':
        pos 
= 1;
        
break;
    
case 's':
        pos 
= 2;
        
break;
    
case 'd':
        pos 
= 3;
        
break;
    
default
        
break;
    }
    x 
= snake[len-1][0];
    y 
= snake[len-1][1];
    
for ( i = len-1; i > 0--i )
    {
        snake[i][
0= snake[i-1][0];
        snake[i][
1= snake[i-1][1];
    }
    snake[
0][0+= d[pos][0];
    snake[
0][1+= d[pos][1];
    
if ( Eat() )
    {
        snake[len][
0= x;
        snake[len][
1= y;
        
++len;
        CreatFood();
    }
    
else if ( Die() )
    {
        gameOver 
= 1;
    }
}

char Judge( char key, char lastKey )
{
    
if ( key == 'd' && lastKey == 'a' )
    {
        
return lastKey;
    }
    
if ( key == 'a' && lastKey == 'd' )
    {
        
return lastKey;
    }
    
if ( key == 'w' && lastKey == 's' )
    {
        
return lastKey;
    }
    
if ( key == 's' && lastKey == 'w' )
    {
        
return lastKey;
    }
    
return key;
}

int main( int argc, char * argv[] )
{
    
char lastKey = 'd';
    
char key = lastKey;
    
int lastTime = GetTickCount();

    srand( (unsigned 
int)GetTickCount() );
    Init();
    Draw();
    
while ( 1 )
    {
        
while ( !kbhit() )
        {
            
while ( GetTickCount()-lastTime < 500 )
            {
                Sleep(
1);
            }
            lastTime 
= GetTickCount();
            Move( key );
            
if ( !gameOver )
            {
                Draw();
            }
        }
        key 
= getch();
        key 
= Judge( key, lastKey );
        lastKey 
= key;
        Move( key );
        
if ( !gameOver )
        {
            Draw();
        }
        
else
        {
            puts( 
"You Lose!");
            
break;
        }
    }
    
return 0;
}

 

 

posted @ 2010-10-20 11:34 tt:) 阅读(83) 评论(4) 编辑
1.具有为集合增加元素的功能
2.具有处理集合的交集、并集的功能,并用 “+” 表示并集, “*” 表
示交集
3.要求用链表来存储集合的元素
4.编写一个main()函数,测试你的集合类的各种功能。
设计说明:
1.定义一个集合类,对操作符+,-进行重载。

2.使用链表

/Files/PureMilk/mySet.rar 

 小菜C++生手,如有bug或可以改进的地方请批评指教

posted @ 2009-06-17 14:13 tt:) 阅读(256) 评论(1) 编辑
posted @ 2008-07-21 11:08 tt:) 阅读(1653) 评论(1) 编辑
POJ 1363 Rails 解题报告

题目的意思是给出一组数,问你是不是一组合法的出栈序列。
我有两个思路:
1、每个已出栈之后的数且小于此数的数都必须按降序排列。复杂度O(n^2)
2、另一个思路就是直接模拟入栈出栈过程。虽然模拟毫无技巧可言,但复杂度O(n),优于算法1。
 1
 2#include <cstdio>
 3
 4int stack[1005]; //
 5int stack_len; //栈顶位置
 6
 7int main()
 8{
 9    int n;
10    while ( scanf( "%d"&n ), n != 0 )
11    {
12          int tmp;
13          int last;
14          while ( scanf( "%d"&tmp ) )
15          {
16                int max = 0;//初始化部分
17                int flag = 1;
18              stack_len = 0;
19              last = 1;
20              
21              if ( tmp == 0 )   {putchar('\n'); flag = -1;break;}//如果是0结束此case
22              while ( last < tmp ) stack[stack_len++= last++;//入栈
23              max = last;
24              
25              for ( int i = 1; i < n; ++i )
26              {
27                    scanf( "%d"&tmp );
28                    if ( flag ) //前提是合理则判断,若已不合理只读如数据,不进行判断
29                    {
30                      if ( stack_len != 0 && stack[stack_len-1== tmp ) //如果栈非空且下一个该出栈的数字与读入数字相同,则出栈
31                      {
32                           --stack_len;
33                           last = tmp;
34                           max>?=last;
35                      }

36                      else if ( tmp > last ) //如果读如的数字比已出栈的最大数字还大,则将读入数字之前的数字全部入栈,此数字作为出栈数字
37                      {
38                           for ( int i = max+1; i < tmp; ++i )
39                           {
40                               stack[stack_len++= i;
41                           }

42                           max = last = tmp;
43                      }

44                      else //如果以上两个条件都不满足,则说明此数列不满足题意
45                      {
46                           flag = 0;
47                      }

48                    }
 
49              }

50              printf( "%s\n", (( flag == 1 )?"Yes":"No") );
51          }

52    }

53    return 0;
54}

55
posted @ 2008-07-19 13:48 tt:) 阅读(629) 评论(0) 编辑
posted @ 2008-07-18 12:17 tt:) 阅读(2743) 评论(1) 编辑
posted @ 2008-07-17 12:00 tt:) 阅读(2380) 评论(15) 编辑
posted @ 2008-06-26 18:58 tt:) 阅读(3537) 评论(12) 编辑
posted @ 2008-06-26 13:26 tt:) 阅读(2283) 评论(15) 编辑
posted @ 2008-06-23 23:13 tt:) 阅读(663) 评论(0) 编辑
仅列出标题