标题:开心小程序,重在参与
只看楼主
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
结帖率:93.75%
已结贴  问题点数:100 回复次数:29 
开心小程序,重在参与
刚产生的想法,程序没有实现,主要是鼓励大家积极思维,开启尘封的大脑,用自己的想法去实现,有人做出来了,不妨秀一秀自己的杰作,重在参与。

提示:  VC++用户,system("cls");语句作用为清屏,需要加头文件#include<Windows.h>
       Linux用户,system("clear");语句作用为清屏,无需加头文件

1.实现一个动态螺旋蛇程序
设计效果:
    蛇身用小写字母a~z按顺序打印,蛇头为a,蛇尾为z,假设界面是30*30的数组矩阵。程序开始时,蛇头从(0,0)以1字符每0.1秒速度匀速进入界面,到达(0,29)后向下移动,到达(29,29)后向左移动,到达(29,0)后向上移动,到达(1,0)后向右移动,到达(1,28)后向下移动,...,如此以螺旋形式向内旋转移动,直到蛇头到了(30/2-1,30/2-1)从此点逐渐退出界面,程序结束。
2.实现一个雪花满天飞程序
设计效果:
    雪花用*打印,假设界面是30*30的数组矩阵。程序开始时,雪花以1字符每0.1秒速度匀速随机打印在界面上,直到整个界面铺满雪花,程序结束。
3.实现一个小孩随便跑程序
设计效果:
    小孩用*打印,假设界面是30*30的数组矩阵。程序开始时,小孩的位置随机产生,w/W(上)s/S(下)a/A(左)d/D(右)控制小孩的移动方向,每击键(wsad)一次按一下回车键,小孩向对应方向移动1下(1字符)。当跑出边缘,则小孩会从相反方向的边缘进入界面,因而小孩由始至终都在界面上乱跑。按下q/Q键退出,程序结束。
4.实现一个天女散仙花程序
设计效果:
    天女用空格打印,仙花用*打印,假设界面是29*29的数组矩阵。程序开始时,天女站在界面的最中央,仙花向天女左右方向同时开始延伸抛洒(左右各一横行),当延伸到边界时,开始第二次抛洒。第二次抛洒,仙花向天女上下方向同时开始延伸抛洒(上下各一横行),当延伸到边界时,开始第三次抛洒。第三次抛洒,仙花紧邻第一次抛洒的仙花向天女左右方向同时开始延伸抛洒(左右各两横行),当延伸到边界时,开始第四次抛洒。第四次抛洒,仙花紧邻第二次抛洒的仙花向天女上下方向同时开始延伸抛洒(上下各两横行),当延伸到边界时,开始第五次抛洒。如此横纵交替抛洒仙花,直到界面被仙花铺满,程序结束。
5.实现一个动态滚动条程序
设计效果:
    滚动条文字由*组成,什么文字由用户自己设定,也可用本人提供的文字样本,假设界面是20*60的数组矩阵。程序开始时,文字出现在界面上面(可以是全部显示,也可以是部分显示),然后以1字符每0.1秒的速度匀速逐渐向一侧移动,移动方向由用户自己决定。如为全部显示,则移出的内容在界面另一侧匀速进入,如为部分显示,则移出的部分紧随最后一个文字后面进入界面。即实现循环显示的效果,有点像跑马灯的意思
文字样本(数字是为了让大家看清文字大小效果):
1
2   *     *        ** *******   *     *         *            
3  **     **      **  *     *   **    *         *            
4 **             **   *     *         *         *    *****   
5**    ******** ***   *     *  ****  ****       *            
6*     *      * * *   *     *     *  *  *       *            
7****  *      *   *   *     *     *  *  *       *            
8   *  ******** ***** *******     * **  **      *  *********
9  **  *          *             *** *    *    *****   *      
0 **   *          *             *   *    **     *     *      
1**   **        ***** *******   *  ***    *     *     *      
2*    * ******* * * *    *      *  * *    **    *     *        
3**** * * * * * * * *    *     **  * *  *  *    *     *      
4     * * * * * * * *    *     *  ** *  *  **   * *  **      
5   * * ******* * * *  *****   *     *  *       *** **      
6  ** * * * * * * * *    *     *  *  ****       ** **    **   
7 **  * * * * * * * *    *     * **  *      *  **  *      **  
8**  ** * * * * * * *    *     ***   *      * **  ***********  
9*  **  * * * * * * ********** **    ******** *  **         *   
0
0123456789012345678901234567890123456789012345678901234567890      

解释权:如用户对以上题目有所疑问,可发短信与我,也可在公屏上问,解释权归本人所有,希望大家灵活变通

[ 本帖最后由 小小战士 于 2013-12-8 11:28 编辑 ]
搜索更多相关主题的帖子: 设计效果 include system Linux 
2013-12-07 22:16
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:8 
第三个的似类兵抓贼游戏?09年写过,一个面试题

我行我乐
我的博客:
http://blog.yuccn. net
2013-12-07 23:44
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:8 
等待程序出炉

三十年河东,三十年河西,莫欺少年穷!
2013-12-08 00:03
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
回复 2楼 yuccn
第二个我在别的地方见过,当时看到别人是用图形库做出来的,也没太研究过,第一个和第三个是我随便想出来的。这三个实现的难度应该不大,程序也应该不太长,在dos界面也能实现,当然会用图形库或MFC实现,那效果当然更好,主要是促进初学者或者有基础的人士开发思维,大牛也可以指导指导,高手如果做这三道题想必如同剔牙缝

小小战士,战士中的战斗机!
2013-12-08 00:12
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:0 
做了一下第三个程序,贴上来请指教!
程序代码:
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<time.h>
void init(char a[32][34]){   //初始化界面
    int i,j;
    for(i=0;i<32;i++)
        strcpy(a[i],"█████████████████");
    for(i=1;i<31;i++)
        for(j=2;j<32;j++)
            a[i][j]=' ';
}
void print(char a[32][34],int m,int n){  //打印
    int i,j;
    a[m][n]='*';
    for(i=0;i<32;i++){
        for(j=0;j<34;j++)
            putchar(a[i][j]);
        printf("\n");
    }
}

main()
{
    char a[32][34],c;
    int m,n;
    init(a);
    srand(time(NULL));
    m=1+rand()%30;
    n=2+rand()%30;
    print(a,m,n);
    printf("请输入方向(a/d/w/s):");
    while((c=getchar())!='q'){
        fflush(stdin);
        init(a);
        system("cls");
        switch(c){
        case 'a':
            if(n==2){
                n=31;               
                print(a,m,n);
                break;
            }
            else{
                n--;
                print(a,m,n);
            }
            break;
        case 'd':
            if(n==31){
                n=2;
                print(a,m,n);
                break;
            }
            else{
                n++;
                print(a,m,n);
            }
            break;
        case 'w':
            if(m==1){
                m=30;
                print(a,m,n);
                break;
            }
            else{
                m--;
                print(a,m,n);
            }
            break;
        case 's':
            if(m==30){
                m=1;
                print(a,m,n);
                break;
            }
            else{
                m++;
                print(a,m,n);
            }
            break;
        default:printf("输入有误!请输入a/d/w/s!\n");
            break;
        }
        printf("退出请输入q,否则请输入方向(a/d/w/s)\n");
    }
    return 0;
}


三十年河东,三十年河西,莫欺少年穷!
2013-12-08 01:19
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
我也实现了第三个,实现原理和你的差不多
程序代码:
#include<stdio.h>
#include<Windows.h>
#include<time.h>
int main()
{
    int i,j,m,n,flag=1;
    char c='*',g[100];
    char face[31][31];

    srand((unsigned)time(NULL));//初始化随机函数种子
    for(i=0;i<31;i++)//界面赋值
    for(j=0;j<31;j++)
    {
        if(i==30)
        face[i][j]='-';
        else if(j==30)
        face[i][j]='|';
        else
        face[i][j]=' ';
    }
    m=rand()%30;//小孩的横坐标
    n=rand()%30;//小孩的纵坐标
    while(1)
    {
        face[m][n]=c;//小孩赋值
        while(1)
        {
            system("cls");//清屏
            for(i=0;i<31;i++)//初始化界面
            {
                for(j=0;j<31;j++)
                printf("%c",face[i][j]);
                printf("\n");
            }
            if(flag==0)
            printf("输入错误!请重新输入!\n");            
            printf("按方向键(wsad/WSAD)移动或者按退出键(q/Q)退出\n");
            printf("我的输入:");
            gets(g);//输入
            if(strlen(g)==1)
                if(g[0]=='a'||g[0]=='A'
                 ||g[0]=='d'||g[0]=='D'
                 ||g[0]=='w'||g[0]=='W'
                 ||g[0]=='s'||g[0]=='S'
                 ||g[0]=='q'||g[0]=='Q')
                break;
            flag=0;
        }
        flag=1;
        face[m][n]=' ';//清空小孩
        switch(g[0])
        {
        case 'A'://左移动
        case 'a':if(n!=0) n--;
                 else n=29;
                 break;
        case 'D'://右移动
        case 'd':if(n!=29) n++;
                 else n=0;
                 break;
        case 'W'://上移动
        case 'w':if(m!=0) m--;
                  else m=29;
                 break;
        case 'S'://下移动
        case 's':if(m!=29) m++;
                 else m=0;
                 break;
        case 'Q'://退出
        case 'q':printf("游戏退出成功!\n");
                 return 0;
        }
    }
    return 0;
}
测试效果:

小小战士,战士中的战斗机!
2013-12-08 10:20
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
还有第二个,雪花满天飞,这个更简单了,但是想控制是1字符每0.1秒速度就不行,因为程序的每条语句执行执行也要花费时间,延时函数delay()也就显得无关紧要了,所以屏幕总是一闪一闪的,不知道能不能让屏幕不闪动
程序代码:
#include<stdio.h>
#include<windows.h>
#include<time.h>
void delay()
{
    int i,j;
    for(i=0;i<100;i++)
    for(j=0;j<100;j++);
}
int main()
{
    int i=0,j,k,m,n;
    char face[30][30];
    memset(face,' ',sizeof(face));//清空界面
    srand((unsigned)time(NULL));//初始化随机函数种子
    while(i<30*30)
    {
        m=rand()%30;//雪花横坐标
        n=rand()%30;//雪花纵坐标
        if(face[m][n]!='*')//判断此坐标是否有雪花
        face[m][n]='*';
        else
        continue;
        for(j=0;j<30;j++)//打印界面
        {
            for(k=0;k<30;k++)
            printf("%c",face[j][k]);
            printf("\n");
        }
        if(i!=30*30-1)
        printf("冬天到了,下雪了!\n");
        else
        printf("冬天过去了,雪下完了!\n");
        printf("雪花数量:%d\n",i+1);
//        delay();//延时函数
        if(i!=30*30-1)
        system("cls");//清屏
        i++;
    }
    return 0;
}
测试效果:


小小战士,战士中的战斗机!
2013-12-08 10:28
xdfu
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2013-9-12
得分:8 
学习一下
2013-12-08 17:31
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
得分:8 
厉害.............

任重而道远
2013-12-08 18:38
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
得分:0 
几个数组,几个函数。。。。这样厉害的思路......

任重而道远
2013-12-08 18:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424859-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.138672 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved