| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5561 人关注过本帖
标题:中文版的C语言V1.71 天宫一号纪念版发布
取消只看楼主 加入收藏
a2120258
Rank: 2
等 级:论坛游民
帖 子:53
专家分:11
注 册:2010-4-18
收藏
得分:0 
回复 80楼 luojie5683

是一门新语言,他的年龄还不到一岁
2011-10-11 22:29
a2120258
Rank: 2
等 级:论坛游民
帖 子:53
专家分:11
注 册:2010-4-18
收藏
得分:0 
应用程序在第二楼有下载
俄罗斯方块的源代码:


#包含 “习语言系统.接口”
#包含 “习语言视窗.接口”

#定义 宽 14 //游戏区域宽度
#定义 高 26 //游戏区域高度
#定义 宽1 6 //右边状态栏宽度
#定义 边长 25 //游戏方格边长
#定义 甲 6 //放置照片的纵坐标
#定义 乙 12 //分数显示栏顶端纵坐标
#定义 丙 15 //等级显示栏顶端纵坐标
#定义 丁 21 //帮助栏顶端纵坐标
#定义 初始横坐标 宽 除 2-1 //游戏方块初始状态左上角横坐标
#定义 初始纵坐标 1 //初始状态左上角纵坐标
#定义 背景颜色 红绿蓝(255,255,255) 
#定义 前景颜色 红绿蓝(255,153,204) //粉红
#定义 红色 红绿蓝(255,0,0)
#定义 橘色 红绿蓝(250,128,10)
#定义 黄色 红绿蓝(255,255,0)
#定义 绿色 红绿蓝(0,255,0)
#定义 灰色 红绿蓝(0,255,255)
#定义 亮绿色 红绿蓝(0xA6,0xCA,0xF0) 
#定义 粉色 红绿蓝(255,0,255)
#定义 产生新方框 视窗消息_用户 加 1  // 消息ID,产生新的【方块】

整数类型 得分=0,等级=0,等级跨度=100; //分数等级以及每等级所需分数的定义及初始化
整数类型 顶=高-1; //最顶端的纵坐标
整数类型 横坐标,纵坐标; //方块当前位置的横坐标及纵坐标
整数类型 当前方块编号,下个方块编号; 
结构类型 板块

    整数类型 状态; //状态,1代表已被占用,0代表未被占用
    整数类型 颜色; //颜色
}板[高][宽]; //定义游戏主板,H行N列

结构类型 区块

    整数类型 方块形状[4][2]; //定义方块形状的数组
    整数类型 颜色; //方块颜色
    整数类型 下一个; //下一个方块的号码
};
结构类型 区块 游戏方块[19]=
{  //初始化各个游戏方块
    {1,1,1,2,1,3,2,3,红色,1},
    {0,2,1,2,2,2,0,3,红色,2},
    {0,1,1,1,1,2,1,3,红色,3},
    {2,1,0,2,1,2,2,2,红色,0},
    {1,1,1,2,0,3,1,3,橘色,5},
    {0,1,0,2,1,2,2,2,橘色,6},
    {1,1,2,1,1,2,1,3,橘色,7},
    {0,2,1,2,2,2,2,3,橘色,4},
    {1,1,0,2,1,2,2,2,黄色,9},
    {1,1,1,2,2,2,1,3,黄色,10},
    {0,2,1,2,2,2,1,3,黄色,11},
    {1,1,0,2,1,2,1,3,黄色,8},
    {1,1,1,2,2,2,2,3,绿色,13},
    {1,2,2,2,0,3,1,3,绿色,12},
    {2,1,1,2,2,2,1,3,灰色,15},
    {0,2,1,2,1,3,2,3,灰色,14},
    {1,0,1,1,1,2,1,3,亮绿色,17},
    {0,2,1,2,2,2,3,2,亮绿色,16},
    {1,1,2,1,1,2,2,2,粉色,18},
};
无类型 进行绘画(画笔类型 画笔) //此函数用于初始化界面

    整数类型 计数1,计数2;
    画笔类型 画笔1; //定义画笔,用于绘制分隔线
    画刷类型 画刷;//定义画刷并赋初值,画刷颜色采用背景色
   
    图形获取画笔(&画笔1);
    画笔1.颜色 = 前景颜色;
    画笔1.风格 = 0;
    图形设置画笔(&画笔1);
   
    图形画线(宽*边长,0,宽*边长,高*边长);
   
    图形获取画刷(&画刷);
    画刷.颜色=背景颜色;
    图形设置画刷(&画刷);
    图形设置背景色(背景颜色);
    步进循环(计数1=1;计数1 小于 高-1;计数1 加加 )  //绘制游戏区域方格线
        步进循环(计数2=1;计数2 小于 宽-1;计数2 加加 )
            图形画方框(计数2*边长,计数1*边长,(计数2 加 1)*边长,(计数1 加 1)*边长);
    步进循环(计数1=1;计数1 小于 5;计数1 加加 )  //绘制右边状态栏游戏预览区域方格线
        步进循环(计数2=宽 加 1;计数2 小于 宽 加 宽1-1;计数2 加加 )
            图形画方框(计数2*边长,计数1*边长,(计数2 加 1)*边长,(计数1 加 1)*边长);
    图形画方框(边长,边长,(宽-1)*边长, (高-1)*边长);
    图形画方框((宽 加 1)*边长,乙*边长,(宽 加 宽1-1)*边长,(乙 加 2)*边长); //绘制分数栏方格线
    图形画方框((宽 加 1)*边长,丙*边长,(宽 加 宽1-1)*边长,(丙 加 2)*边长); //绘制等级栏方格线
    图形画方框((宽 加 1)*边长,丁*边长,(宽 加 宽1-1)*边长,(丁 加 4)*边长); //绘制帮助栏方格线
    图形输出文字((宽 加 2)*边长,(乙 加 0.2)*边长,“分数”); //输出文字
    图形输出文字((宽 加 2)*边长,(丙 加 0.2)*边长,“等级”); //同上
   

无类型 显示分数(【HDC hdc】) //显示分数的函数

    字符类型 分数字符[4]; //定义字符串用于保存分数值
    格式化(分数字符,20,“%3整”,得分); //将数字score转换成字符串后保存到score_str之中
    图形输出文字((宽 加 2.5)*边长,(乙 加 1.2)*边长,分数字符); //在游戏板上显示分数

无类型 显示等级(【HDC hdc】) //显示等级的,具体同上

    字符类型 等级字符[4];
    格式化(等级字符,20,“%3整”,等级);
    图形输出文字((宽 加 2.5)*边长,(丙 加 1.2)*边长,等级字符);

无类型 显示帮助(【HDC hdc】) //显示帮助的,该函数只在初始化界面时调用

    字符类型 帮助1[]=“↑ - 旋转”,
    帮助2[]=“↓ - 下移”,
    帮助3[]=“← - 左移”,
    帮助4[]=“→ - 右移”;
    图形输出文字((宽 加 1.8)*边长,(丁 加 0.2)*边长,帮助1);
    图形输出文字((宽 加 1.8)*边长,(丁 加 1.2)*边长,帮助2);
    图形输出文字((宽 加 1.8)*边长,(丁 加 2.2)*边长,帮助3);
    图形输出文字((宽 加 1.8)*边长,(丁 加 3.2)*边长,帮助4);

无类型 擦除方块(画笔类型 画笔,整数类型 横坐标,整数类型 纵坐标,整数类型 编号) 

    整数类型 计数1;
    画笔类型 画刷;
    图形获取画笔(&画刷);
    画刷.颜色 = 背景颜色;
    图形设置画笔(&画刷);
    步进循环(计数1=0;计数1 小于 4;计数1 加加 )   //用背景色填充方块所在区域,使方块隐藏
        图形画矩形((横坐标 加 游戏方块[编号].方块形状[计数1][0])*边长,(纵坐标 加 游戏方块[编号].方块形状[计数1][1])*边长,
            (横坐标 加 游戏方块[编号].方块形状[计数1][0] 加 1)*边长,(纵坐标 加 游戏方块[编号].方块形状[计数1][1] 加 1)*边长);


无类型 显示方块(画笔类型 画笔,整数类型 横坐标,整数类型 纵坐标,整数类型 编号) //显示(横坐标,纵坐标)处编号为编号,的方块

    整数类型 计数1;
    画刷类型 画刷;
   
    图形获取画刷(&画刷);
    画刷.颜色 = 红绿蓝(0,0,255);
    图形设置画刷(&画刷);
   
    步进循环(计数1=0;计数1 小于 4;计数1 加加 ) //显示方块的过程
        图形画矩形((横坐标 加 游戏方块[编号].方块形状[计数1][0])*边长,(纵坐标 加 游戏方块[编号].方块形状[计数1][1])*边长,
            (横坐标 加 游戏方块[编号].方块形状[计数1][0] 加 1)*边长,(纵坐标 加 游戏方块[编号].方块形状[计数1][1] 加 1)*边长);
    进行绘画(画笔); 


无类型 满行处理(画笔类型 画笔) //满行处理函数

    整数类型 计数1,临时计数,计数2;
    整数类型 区域_顶=顶;
    整数类型 标识=0;
    画刷类型 画刷;
    图形获取画笔(&画笔);
    画笔.颜色 = 背景颜色;
    图形设置画笔(&画笔);
    步进循环(计数1=纵坐标;计数1 小于 纵坐标 加 4;计数1 加加 ) //从 纵坐标 行开始,从上到下遍历游戏区域
   
        如果(计数1 小于等于 0 或 计数1 大于等于 高-1) 继续; //越界了,就跳出本次循环
        步进循环(计数2=1;计数2 小于 宽-1;计数2 加加 )
            如果( 非 板[计数1][计数2].状态) 跳出; //一旦该行有一个为空,即跳出
        如果(计数2 等于 宽-1) //找到满行了
        
            步进循环(临时计数=计数1;临时计数 大于等于 顶;临时计数 减减 ) //重置游戏区域各个方格的状态,顶为最顶端,计数1为找到的满行
                步进循环(计数2=1;计数2 小于 宽-1;计数2 加加 )
                    板[临时计数][计数2]=板[临时计数-1][计数2];
            顶 加加 ;
            得分 加等 10; //分数加10
            标识=1; //标志符
        
   
    如果(标识) //如果有满行,则重绘主板
   
        步进循环(计数1=区域_顶;计数1 小于 纵坐标 加 4;计数1 加加 ) //原来的最顶端
        
            如果(计数1 小于等于 0 或 计数1 大于等于 高-1) 继续; //越界了,就跳出本次循环
            步进循环(计数2=1;计数2 小于 宽-1;计数2 加加 )
            { 
                图形获取画刷(&画刷);
                画刷.颜色 = 板[计数1][计数2].颜色;
                图形设置画刷(&画刷);
                图形画矩形(计数2*边长,计数1*边长,(计数2 加 1)*边长,(计数1 加 1)*边长);
            
        
        如果(等级 不等于 得分 除 等级跨度) //这里是程序优化部分,也可省略
            等级=得分 除 等级跨度;
        显示分数(); //更新分数
        显示等级(); //更新等级
   

无类型 改变游戏面板状态(无类型) //改变游戏主板的状态

    整数类型 计数1;
    步进循环(计数1=0;计数1 小于 4;计数1 加加 )
   
        板[纵坐标 加 游戏方块[当前方块编号].方块形状[计数1][1]][横坐标 加 游戏方块[当前方块编号].方块形状[计数1][0]].状态=1; //状态置1,表示有方块填充
        板[纵坐标 加 游戏方块[当前方块编号].方块形状[计数1][1]][横坐标 加 游戏方块[当前方块编号].方块形状[计数1][0]].颜色=游戏方块[当前方块编号].颜色;
   

整数类型 可否移动(无类型) //判断方块是否能移动

    整数类型 计数1;
    步进循环(计数1=0;计数1 小于 4;计数1 加加 )
        如果(板[纵坐标 加 游戏方块[当前方块编号].方块形状[计数1][1]][横坐标 加 游戏方块[当前方块编号].方块形状[计数1][0]].状态) //如果该位置以及有方块填充,则不能移动
            返回 0;
    返回 1;


整数类型 定时器处理主函数(双字类型 定时器号)
{    
    返回 0;


整数类型 显示器消息主处理( 自然数类型 消息, 双字类型 参数1, 双字类型 参数2 );
整数类型 主函数( )
{    
    图形初始化显示器(“习语言 简单俄罗斯方块  by  花心胡萝卜”,(宽 加 宽1)*边长,(高)*边长,空指针,0,显示器消息主处理 );
    图形打开显示器(0);
    【====用户代码开始==】
   
    图形初始化定时器(定时器处理主函数);
    图形创建定时器(定时器1,500);
        
    【====用户代码结束==】
    图形等待显示器关闭();             //进入消息循环,处理视窗消息,消息代码中调用 图形关闭显示器(0) 关闭显示器,返回。
    返回 0;


整数类型 显示器消息主处理( 自然数类型 消息, 双字类型 参数1, 双字类型 参数2 )

    【====用户消息处理开始==】
    //用户已经处理的消息,返回1,系统不再处理此消息,没处理的消息,返回0,让系统处理
    整数类型 计数1,计数2;
    整数类型 老方块编号; //用于保存之前的方块号
    时间类型 时间;
    画笔类型 画笔;//选择画刷,用背景色作画刷
    图形获取画笔(&画笔);
    画笔.风格 = 0;
    图形设置画笔(&画笔);
   
    分支(消息) //消息处理的过程
   
        若等于 视窗消息_创建: ////当一个应用程序使用函数CreateWindow或CreateWindowEx来创建一个窗口时,
            //系统将发送该消息给此新建窗口过程。该消息将在创建窗口之后,显示窗口
            //之前发送该消息,该消息将在CreateWindow或CreateWindowEx函数返回之前发送。
            步进循环(计数1=1;计数1 小于 高;计数1 加加 ) //初始化状态,讲两竖边状态初始化为1
                板[计数1][0].状态=板[计数1][宽-1].状态=1;
            步进循环(计数2=1;计数2 小于 宽-1;计数2 加加 ) //将最底部状态置1
                板[高-1][计数2].状态=1;
            步进循环(计数1=1;计数1 小于 高-1;计数1 加加 ) //将游戏区域状态置0
                步进循环(计数2=1;计数2 小于 宽-1;计数2 加加 )
               
                    板[计数1][计数2].状态=0;
                    板[计数1][计数2].颜色=背景颜色;
               
            时间 = 当前时间();
            初始化随机数((自然数类型)当地时间(&时间));
            当前方块编号=  取随机数() 模除 19; //赋初值
            下个方块编号=  取随机数() 模除 19; //赋初值
            横坐标=初始横坐标; //初始化方块横坐标
            纵坐标=初始纵坐标; //初始化方块纵坐标
            返回 1; //直接退出窗口过程函数
        若等于 视窗消息_绘图: //绘制界面,当应用程序适用UpdateWindow刷新窗口时,第一次发送该消息

            画笔.风格 = 0;
            画笔.颜色 = 红绿蓝(0,0,255);
            图形设置画笔(&画笔);
            进行绘画(画笔); 
            
            显示分数(); //显示分数
            显示等级(); //显示等级
            显示帮助(); //显示帮助栏
            显示方块(画笔,横坐标,纵坐标,当前方块编号); //显示游戏区域中的游戏方块
            显示方块(画笔,宽 加 1,1,下个方块编号); //显示右边状态栏的游戏方块
            
            返回 1;
        若等于 视窗消息_定时到: //定时器消息,每0.5秒接受到一次            
            纵坐标 加加 ; 
            如果(可否移动()) //如果能移动,则擦除原来位置方块,显示新位置方块,相当于是方块下落
            {              
                擦除方块(画笔,横坐标,纵坐标-1,当前方块编号);
                显示方块(画笔,横坐标,纵坐标,当前方块编号);
               
            
            否则 //如果不能移动,则到底了,纵坐标 恢复之前的值,并发送  产生新方框  产生新的方块
            
                纵坐标 减减 ;
                
                发送消息( 0,产生新方框,0,0);
            
            返回 1;
        若等于 视窗消息_键按下: //当按下键时,会发送该消息
            分支((整数类型)参数1) //判断具体按下的键
            
                若等于 0x26【VK_UP】:
                    老方块编号=当前方块编号; //保存当前方块号
                    当前方块编号=游戏方块[当前方块编号].下一个; //方块号变为下一个方块号
                    如果(可否移动())
                    
                        擦除方块(画笔,横坐标,纵坐标,老方块编号);
                        显示方块(画笔,横坐标,纵坐标,当前方块编号);
                    
                    否则
                        当前方块编号=老方块编号; //恢复之前的值
                    跳出;
                若等于 0x28【VK_DOWN】:
                    纵坐标 加加 ;
                    如果(可否移动())
                    
                        擦除方块(画笔,横坐标,纵坐标-1,当前方块编号);
                        显示方块(画笔,横坐标,纵坐标,当前方块编号);
                    
                    否则
                    
                        纵坐标 减减 ;
                        发送消息( 0,产生新方框,0,0);
                    
                    跳出;
                若等于 0x25【VK_LEFT】:
                    横坐标 减减 ; //横坐标减小1
                    如果(可否移动()) //如果能移动,则下移,不能移动则恢复之前坐标
                    
                        擦除方块(画笔,横坐标 加 1,纵坐标,当前方块编号);
                        显示方块(画笔,横坐标,纵坐标,当前方块编号);
                    
                    否则
                        横坐标 加加 ;
                    跳出;
                若等于 0x27【VK_RIGHT】: //同上
                    横坐标 加加 ;
                    如果(可否移动())
                    
                        擦除方块(画笔,横坐标-1,纵坐标,当前方块编号);
                        显示方块(画笔,横坐标,纵坐标,当前方块编号);
                    
                    否则
                        横坐标 减减 ;
                    跳出;
            
            返回 1;
        若等于 产生新方框:
            如果(顶 大于 纵坐标 加 游戏方块[当前方块编号].方块形状[0][1])
                顶=纵坐标 加 游戏方块[当前方块编号].方块形状[0][1]; //确定最高点
            改变游戏面板状态(); //改变游戏主板状态
            满行处理(画笔); //满行处理
            当前方块编号=下个方块编号;
            横坐标=初始横坐标; //重置方块坐标
            纵坐标=初始纵坐标;
            画笔.颜色 = 前景颜色;
            画笔.风格 = 0;
            图形设置画笔(&画笔);
            初始化随机数(取随机数());            
            下个方块编号=取随机数() 模除 19;
            擦除方块(画笔,宽 加 1,1,当前方块编号); //清除右边状态栏的方块
            显示方块(画笔,宽 加 1,1,下个方块编号); //显示右边状态栏的方块
            显示方块(画笔,初始横坐标,初始纵坐标,当前方块编号); //显示游戏主板顶部方块
            如果( 非 可否移动()) //刚移开始就不能移动,则结束程序退出
            
                图形销毁定时器(定时器1);
                消息框(“游戏结束了!”,“退出”,64);
            
            返回 1;
        若等于 视窗消息_销毁: //退出游戏
            图形销毁定时器(定时器1);
            返回 0;
   
    【====用户消息处理结束==】
    返回 0;

2011-10-11 22:33
a2120258
Rank: 2
等 级:论坛游民
帖 子:53
专家分:11
注 册:2010-4-18
收藏
得分:0 
回复 87楼 yeh2008
只要C语言能做的,用习语言都能做到,习语言兼容现在的C语言,你也可以用习语言来写C代码,这都是很不错的选择!
2011-10-13 19:08
a2120258
Rank: 2
等 级:论坛游民
帖 子:53
专家分:11
注 册:2010-4-18
收藏
得分:0 
恩,试试吧!
2011-10-23 16:41
快速回复:中文版的C语言V1.71 天宫一号纪念版发布
数据加载中...
 
   



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

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