找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2061|回复: 0
打印 上一主题 下一主题
收起左侧

16X16的点阵游戏机 程序求解答

[复制链接]
跳转到指定楼层
楼主
ID:111440 发表于 2016-4-24 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人想做一个16X16的点阵游戏机,在网上看到有人做了,但是程序有些不明白,求大神帮忙。
下面是程序

#include"reg51.h"
#include"stdlib.h"
#include"intrins.h"
#include"keyscan.h"
#define uchar unsigned char
#define uint unsigned int

sbit SDI=P3^4;                //串行数据输入
sbit SCK=P3^6;                //移位
sbit RCK=P3^5;                //并行输出

extern uchar startcontrol;
uchar h;                                       //底部下落的高度,y=0,刚刚出现
uchar shape_num;                           //一共19种形状,=0~18
uint speed;                                           //下落速度
uint initial_speed;                           //下落的初始速度
uint system_speed;                           //系统下落速度,会随着分数的增加而减小,下落速度会加快
uint fast_speed;                                //按下down键时,方块的下落速度
uint rand_num;                                        //随机数变量,产生随机方块
uint k;
uint score;                                                //游戏分数

uchar code num_hang[]={ 0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,
                                                 0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00};        //从最上面一行开始向下

//uchar code num_qian[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar code num_one[]={
                                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                        16,4,16,21,208,36,136,36,136,4,236,63,138,4,136,20,136,21,232,24,136,40,136,40,136,52,232,34,0,0,0,0,//俄
                                        252,63,68,34,68,34,68,34,252,63,64,0,32,0,240,31,44,16,64,8,128,4,0,3,224,0,30,0,0,0,0,0,                         //罗
                                        36,24,36,7,126,1,36,1,36,1,60,63,36,9,60,9,36,9,36,9,126,9,0,9,164,8,66,8,0,0,0,0,                                         //斯
                                        64,0,128,0,254,63,32,0,32,0,32,0,224,15,32,8,32,8,16,8,16,8,8,8,4,8,2,6,0,0,0,0,                                         //方
                                        8,1,8,1,200,31,8,17,62,17,8,17,8,17,232,63,8,5,56,5,142,8,128,8,64,16,32,32,0,0,0,0,                                 //块
                                        64,4,132,4,8,60,224,5,64,2,66,28,196,17,80,9,80,63,72,9,72,9,36,9,164,9,16,12,0,0,0,0,                                 //游
                                        0,10,0,18,124,18,64,2,64,62,164,3,40,18,16,18,48,10,40,10,72,36,68,42,2,49,128,32,0,0,0,0,                         //戏
                                        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0                                 
                                        };
//uchar code num_hou[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar code shape[19][8]={
                                                 0x00,0x00,0x00,0x00,0x80,0x01,0x80,0x01,                                         //19种方块形状
                                                 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
                                                 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,
                                                 0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,
                                                 0x00,0x00,0x00,0x00,0xc0,0x00,0x80,0x01,        
                                                 0x00,0x00,0x80,0x00,0x80,0x01,0x00,0x01,
                                                 0x00,0x00,0x00,0x00,0x80,0x01,0xc0,0x00,
                                                 0x00,0x00,0x00,0x01,0x00,0x01,0x80,0x01,
                                                 0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x01,
                                                 0x00,0x00,0x80,0x01,0x80,0x00,0x80,0x00,
                                                 0x00,0x00,0x00,0x00,0x40,0x00,0xc0,0x01,
                                                 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x01,
                                                 0x00,0x00,0x00,0x00,0x00,0x01,0xc0,0x01,
                                                 0x00,0x00,0x80,0x01,0x00,0x01,0x00,0x01,
                                                 0x00,0x00,0x00,0x00,0xc0,0x01,0x40,0x00,
                                                 0x00,0x00,0x00,0x00,0x80,0x00,0xc0,0x01,
                                                 0x00,0x00,0x00,0x01,0x80,0x01,0x00,0x01,
                                                 0x00,0x00,0x00,0x00,0xc0,0x01,0x80,0x00,
                                                 0x00,0x00,0x80,0x00,0x80,0x01,0x80,0x00
                                                   };
char staticdata[20][2]={    0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0x00,0x00,
                                                        0xff,0xff                };                          //方块落下后固定显示

//                                        后8列        前8列    下8行        上8行
void HC595_Send(uchar d0,uchar d1,uchar d2,uchar d3)
{
        uchar i;
//        SCK=1;
//        RCK=1;
        for(i=0;i<8;i++)
        {
                SDI=d0>>7;//&0x01;
                d0<<=1;//>>=1;
                SCK=0;
                _nop_();
                _nop_();
                SCK=1;
        }
        for(i=0;i<8;i++)
        {
                SDI=d1>>7;//&0x01;
                d1<<=1;//>>=1;
                SCK=0;
                _nop_();
                _nop_();
                SCK=1;
        }
        for(i=0;i<8;i++)
        {
                SDI=d2>>7;//&0x01;
                d2<<=1;//>>=1;
                SCK=0;
                _nop_();
                _nop_();
                SCK=1;
        }
        for(i=0;i<8;i++)
        {
                SDI=d3>>7;//&0x01;
                d3<<=1;//>>=1;
                SCK=0;
                _nop_();
                _nop_();
                SCK=1;
        }
        RCK=0;
        _nop_();
        _nop_();
        RCK=1;
}
/**********开始界面*************/
void initial_image()
{
        uchar j,k,ms;
        startcontrol=1;
        while(startcontrol)
        {
                for(ms=10;ms>0;ms--)
                {
                        for(j=0;j<32;j+=2)
                                HC595_Send(~num_one[k+j+1],~num_one[k+j],num_hang[j],num_hang[j+1]);
                }                                
                k+=2;
                if(k==(32*8))        k=0;
                keyscan();                                        //键盘扫描
        }
}
/***********数据初始化**********/
void initial_set()
{
        char j;
        h=0;
        startcontrol=1;
        shape_num=0;
        initial_speed=50;
        speed=initial_speed;
        system_speed=initial_speed;
        fast_speed=5;
        rand_num=rand()%19;
        shape_num=rand_num;
        score=0;
        for(j=0;j<19;j++)
        {
                staticdata[j][0]=0;
                staticdata[j][1]=0;
        }
}
/**********显示形状************/
void shape_display()
{
        uchar j;
        for(j=(h<3)?(3-h):0;j<4;j++)
        {
                HC595_Send(~shape[shape_num][2*j+1],~shape[shape_num][2*j],num_hang[2*(j+h-3)],num_hang[2*(j+h-3)+1]);        
        }
        for(j=0;j<16;j++)
        {
                HC595_Send(~staticdata[j+3][1],~staticdata[j+3][0],num_hang[2*j],num_hang[2*j+1]);         //[3][0] [3][1]~[18][0] [18][1]
        }                                                                                                                                                                                          
}

/**********检查方块是否遇到障碍物***********/
uchar check(uchar shapenum)                                                   //????????????
{
        char i=3,j=0;
        while((!j)&&(i>=0))
        {
                if(((shape[shapenum][2*i]+staticdata[h+i][0])!=(shape[shapenum][2*i]|staticdata[h+i][0]))||
                ((shape[shapenum][2*i+1]+staticdata[h+i][1])!=(shape[shapenum][2*i+1]|staticdata[h+i][1])))                 j++;
                //((shape[shapenum][2*i]+staticdata[h+i][0]!=shape[shapenum][2*i]|staticdata[h+i][0])||
                //(shape[shapenum][2*i+1]+staticdata[h+i][1]!=shape[shapenum][2*i+1]|staticdata[h+i][1]))                 j++;                                       
                i--;                         //???
        }
        return j;
}
/************主函数************/
void main()
{
        char j;
        initial_image();
        initial_set();
        while(1)
        {
                k=speed;
                while(k--)
                {
                        //keyscan();
                        shape_display();
                }
                h++;                         //方块下落一格
                if(check(shape_num))
                {
                        h--;
                        if(!h)
                        {
                                initial_image();
                                initial_set();
                        }
                        else
                        {                                
                                for(j=0;j<4;j++)
                                {
                                        staticdata[h+j][0]+=shape[shape_num][2*j];                         //[30]~[37]
                                        staticdata[h+j][1]+=shape[shape_num][2*j+1];
                                }
                                h=0;
                                rand_num=rand()%19;
                                shape_num=rand_num;
                        }
                }               
        }                                            
}

我想知道那个staticdata数组是什么意思,求相助。






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表