| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3081 人关注过本帖, 1 人收藏
标题:原创C语言程式《变色钻石》
只看楼主 加入收藏
yayapipi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-22
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:7 
原创C语言程式《变色钻石》
图片附件: 游客没有浏览图片的权限,请 登录注册

试试看写了一个可以使用菜单功能选项的功能写法,写了一个可以选择颜色然后变更钻石颜色的小程式
程式运用了curses的header,主要是在Unix系统下编译,编译方法是 cc code.c -lcurses
附上源码,大家一起学习
程序代码:
#include<curses.h>
#include<stdlib.h>

#define RED "\033[31m"
#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define BLUE "\033[34m"
#define MAGENTA "\033[35m"
#define CYAN "\033[36m"
#define CLEAN "\033[37m"
#define CURSAVE "\033[s"
#define CURBACK "\033[u"
#define CLEAR "\033[2J"

char color[7][10]={RED,GREEN,YELLOW,BLUE,MAGENTA,CYAN,CLEAN};

void initial(){
        initscr();
        cbreak();
        nonl();
        noecho();
        intrflush(stdscr,FALSE);
        keypad(stdscr,TRUE);
        refresh();
}

void set_Word(char **word);
void showColor(int *gate,char *word[]);
void closeOther(int *gate,int on);

void drawDiamend(int *gate,int point);
void killDiamend();

void rainbow();

int main(){
        int ch;
        int gate[8]={0,0,0,0,0,0,0,0};
        char *word[8];
        int wx;
        int point;
        for(wx=0;wx<=8;wx++){
            *(word+wx) = (char *)malloc(sizeof(char)*10);
        }
        set_Word(word);
        point = 0;  // Point To Red
        initial();
        mvaddstr(4,22,"Please Select Your Favourite Color:\n");
        closeOther(gate,0);
        showColor(gate,word);
        drawDiamend(gate,0);
        do{
            ch = getch();
            switch(ch){
                    case KEY_UP:
                        if(point < 1){
                                point = 6;
                        }else{
                                point--;
                        }
                        closeOther(gate,point);
                        showColor(gate,word);
                        break;
                    case KEY_DOWN:
                        if(point > 5){
                                point = 1;
                        }else{
                                point++;
                        }
                        closeOther(gate,point);
                        showColor(gate,word);
                        break;
                    case '\r':
                        killDiamend();
                        refresh();
                        drawDiamend(gate,point);
                        break;
                    case 27:
                        killDiamend();
                        rainbow();
                        endwin();
                        exit(1);
                        break;
                }
            }while(1);

                       

            refresh();
}

void set_Word(char *word[]){
        *word = "RED";
        *(word+1) = "GREEN";
        *(word+2) = "YELLOW";
        *(word+3) = "BLUE";
        *(word+4) = "MAGENTA";
        *(word+5) = "CYAN";
        *(word+6) = "WHITE";
}
void showColor(int *gate,char **word){
        int x;
        for(x=0;x<8;x++){
                if(gate[x]==1){
                        attron(A_REVERSE);
                        mvaddstr(5+x,22,word[x]);
                        attroff(A_REVERSE);
                        refresh();
                }else{
                        attrset(A_NORMAL);
                        mvaddstr(5+x,22,word[x]);
                }
        }
        refresh();
}

void closeOther(int *gate, int on){
        int x;
        for(x=0;x<8;x++){
                *(gate+x) = 0;
        }
        *(gate+on) =1;
        return;
}

void killDiamend(){
        mvaddstr(6,50,"aaaaaaaaaaa");
        mvaddstr(7,48,"aaaaaaaaaaaaaaa");
        mvaddstr(8,46,"aaaaaaaaaaaaaaaaaaa");
        mvaddstr(9,48,"aaaaaaaaaaaaaaa");
        mvaddstr(10,50,"aaaaaaaaaaaa");
        mvaddstr(11,52,"aaaaaaaa");
        mvaddstr(12,54,"aaaa");
        refresh();
        printf(CLEAN);
        return;
}
void drawDiamend(int *gate,int point){
        printf(color[point]);
        mvaddstr(6,50,"***********");
        mvaddstr(7,48,"***************");
        mvaddstr(8,46,"*******************");
        mvaddstr(9,48,"***************");
        mvaddstr(10,50,"************");
        mvaddstr(11,52,"********");
        mvaddstr(12,54,"****");
        refresh();
        printf(CLEAN);
        return;
}
void rainbow(){
        printf(color[0]);
        mvaddstr(6,50,"***********");
        refresh();
        mvaddstr(7,48,"***************");
        printf(color[1]);
        refresh();
        mvaddstr(8,46,"*******************");
        printf(color[2]);
        refresh();
        mvaddstr(9,48,"***************");
        printf(color[3]);
        refresh();
        mvaddstr(10,50,"************");
        printf(color[4]);
        refresh();
        mvaddstr(11,52,"********");
        printf(color[5]);
        refresh();
        mvaddstr(12,54,"****");
        refresh();
        printf(CLEAN);
        return;
}
//www. 版權所有 , 盜版不究 :P



[此贴子已经被作者于2016-1-10 18:24编辑过]

搜索更多相关主题的帖子: C语言 钻石 
2016-01-10 18:21
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
收藏
得分:4 
支持原创
2016-01-10 18:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
以下是引用zlz66668888在2016-1-10 18:41:28的发言:

试了,在VC下编译不起来。

他已經説了,這是Unix下的東西,使用了外掛庫。

授人以渔,不授人以鱼。
2016-01-10 18:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用zlz66668888在2016-1-10 18:50:58的发言:

那怎么在VC下外挂呢?
下载一个curses.h吗?


在Windows下直接調用Windows API即可。Unix/Linux等系統用它們的,Windows也有自己的。在vc中#include <Windows.h>,啥都有,不需要這個。函數不同,做法是一樣的,基本上改動一下函數名即可。

授人以渔,不授人以鱼。
2016-01-10 18:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
參閲一下百度資料吧:http://baike.baidu.com/view/2205825.htm

授人以渔,不授人以鱼。
2016-01-10 18:59
yayapipi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-22
收藏
得分:0 
啊,没考虑到window...
一不小心就习惯在unix系统打了
2016-01-11 00:32
crystone
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:45
专家分:183
注 册:2015-11-26
收藏
得分:4 
以下是引用yayapipi在2016-1-11 00:32:24的发言:

啊,没考虑到window...
一不小心就习惯在unix系统打了

unix?现在用unix的非常少了诶,大部分都是用linux。用的freebsd吗?
2016-01-11 00:36
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
嗯,在windows系统下用c做出类似的效果,问题不大,还可以消光标,只是不知道显示速度有这么快没有。楼主画钻石的代码太机械,完全可以写个函数drawdimo(int s,int m,int e,int x,int y),参数的含义依次是起始*数目,最大*数目,结束*数目,钻石坐标。

能编个毛线衣吗?
2016-01-11 08:52
快速回复:原创C语言程式《变色钻石》
数据加载中...
 
   



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

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