吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4147|回复: 12
收起左侧

[其他转载] 俄罗斯方块桌面版C++源码

[复制链接]
错过了一个亿 发表于 2019-11-17 17:22
本帖最后由 错过了一个亿 于 2019-11-18 13:22 编辑

大家玩过俄罗斯方块吗?
我相信,很多人都玩过。
但,谁又有源码呢?
在这里,我给大家C++源码(源码见最后面的附件)


部分源代码:

[C++] 纯文本查看 复制代码
#include<windows.h>
#include<time.h>
#include<stdlib.h>

#define W 14 //游戏区域宽度
#define H 20 //游戏区域高度
#define W1 6 //右边状态栏宽度
#define BSIZE 25 //游戏方格边长
#define Y1 6 //放置照片底端的纵坐标
#define Y2 12 //分数显示栏顶端纵坐标
#define Y3 15 //等级显示栏顶端纵坐标
#define Y4 7 //帮助栏顶端纵坐标
#define Cur_x W/2-1 //游戏方块初始状态左上角横坐标
#define Cur_y 1 //初始状态左上角纵坐标
#define BgColor RGB(0xF5,0xF5,0xDC) //米色
#define FgColor RGB(255,153,204) //粉红
#define RED RGB(255,0,0)
#define ORANGE RGB(255,97,0)
#define YELLOW RGB(255,153,18)
#define GREEN RGB(34,139,34)
#define CYAN RGB(128,42,42)
#define LIGHT_BLUE RGB(65,105,225) //天蓝色
#define PURPLE RGB(255,0,255)
#define MS_NEWBLOCK WM_USER+1  // 消息ID,产生新的【方块】

int score=0,level=0,level_step=100; //分数等级以及每等级所需分数的定义及初始化
int top=H-1; //最顶端的纵坐标
int x,y; //方块当前位置的横坐标及纵坐标
int cur_boxnum,next_boxnum; //cur_boxnum是当前方块编号,next_boxnum是下一个方块编号

struct BOARD
{
        int var; //状态,1代表已被占用,0代表未被占用
        int color; //颜色
}board[H][W]; //定义游戏主板,H行N列

struct BLOCK
{
        int a[4][2]; //定义方块形状的数组,每行为方块左上角坐标
        int color; //方块颜色
        int next; //下一个方块的号码
};

struct BLOCK block[19]=
{  //初始化各个游戏方块
        {1,1,1,2,1,3,2,3,RED,1},
        {0,2,1,2,2,2,0,3,RED,2},
        {0,1,1,1,1,2,1,3,RED,3},
        {2,1,0,2,1,2,2,2,RED,0},
        {1,1,1,2,0,3,1,3,ORANGE,5},
        {0,1,0,2,1,2,2,2,ORANGE,6},
        {1,1,2,1,1,2,1,3,ORANGE,7},
        {0,2,1,2,2,2,2,3,ORANGE,4},
        {1,1,0,2,1,2,2,2,YELLOW,9},
        {1,1,1,2,2,2,1,3,YELLOW,10},
        {0,2,1,2,2,2,1,3,YELLOW,11},
        {1,1,0,2,1,2,1,3,YELLOW,8},
        {1,1,1,2,2,2,2,3,GREEN,13},
        {1,2,2,2,0,3,1,3,GREEN,12},
        {2,1,1,2,2,2,1,3,CYAN,15},
        {0,2,1,2,1,3,2,3,CYAN,14},
        {1,0,1,1,1,2,1,3,LIGHT_BLUE,17},
        {0,2,1,2,2,2,3,2,LIGHT_BLUE,16},
        {1,1,2,1,1,2,2,2,PURPLE,18},
};

void Paint(HDC hdc,HPEN hpen) //此函数用于初始化界面
{
        int i,j;
        HPEN hpen1; //定义画笔,用于绘制分隔线
        HBRUSH hbrush=CreateSolidBrush(BgColor); //定义画刷并赋初值,画刷颜色采用背景色

        hpen1=CreatePen(PS_DASHDOTDOT,3,FgColor); //给画笔赋初值,颜色为前景色,线宽为3,双点划线
        SelectObject(hdc,hpen1); //选择画笔
        MoveToEx(hdc,W*BSIZE,0,NULL); //将光标移动到(W*BSIZE,0)处
        LineTo(hdc,W*BSIZE,H*BSIZE); //从光标所在位置画线到(W*BSIZE,H*BSIZE)处
        DeleteObject(hpen1); //删除之前所选用的画笔
        SelectObject(hdc,hpen); //重新选择画笔
        SelectObject(hdc,hbrush); //选择画刷

        for(i=1;i<H-1;i++)  //绘制游戏区域方格线
                for(j=1;j<W-1;j++)
                        Rectangle(hdc,j*BSIZE,i*BSIZE,(j+1)*BSIZE,(i+1)*BSIZE);

        for(i=1;i<5;i++)  //绘制右边状态栏游戏预览区域方格线
                for(j=W+1;j<W+W1-1;j++)
                        Rectangle(hdc,j*BSIZE,i*BSIZE,(j+1)*BSIZE,(i+1)*BSIZE);

        Rectangle(hdc,(W+1)*BSIZE,Y2*BSIZE,(W+W1-1)*BSIZE,(Y2+2)*BSIZE); //绘制分数栏方格线
        Rectangle(hdc,(W+1)*BSIZE,Y3*BSIZE,(W+W1-1)*BSIZE,(Y3+2)*BSIZE); //绘制等级栏方格线
        Rectangle(hdc,(W+1)*BSIZE,Y4*BSIZE,(W+W1-1)*BSIZE,(Y4+4)*BSIZE); //绘制帮助栏方格线

        TextOut(hdc,(W+2)*BSIZE,(Y2+0.2)*BSIZE,TEXT("分    数"),8); //输出文字
        TextOut(hdc,(W+2)*BSIZE,(Y3+0.2)*BSIZE,TEXT("等    级"),8); //同上

        DeleteObject(hpen); //删除画笔
        DeleteObject(hbrush); //删除画刷
}

void ShowScore(HDC hdc) //显示分数的函数
{
        TCHAR  score_str[4]; //定义字符串用于保存分数值
        wsprintf(score_str,TEXT("%3d"),score); //将数字score转换成字符串后保存到score_str之中
        TextOut(hdc,(W+2.5)*BSIZE,(Y2+1.2)*BSIZE,score_str,3); //在游戏板上显示分数
}
 
void ShowLevel(HDC hdc) //显示等级的,具体同上
{
        TCHAR level_str[4];
        wsprintf(level_str,TEXT("%3d"),level);
        TextOut(hdc,(W+2.5)*BSIZE,(Y3+1.2)*BSIZE,level_str,3);
}

void ShowHelp(HDC hdc) //显示帮助的,该函数只在初始化界面时调用
{
        TCHAR help1[]=TEXT("↑ - 旋转"),
                help2[]=TEXT("↓ - 下移"),
                help3[]=TEXT("← - 左移"),
                help4[]=TEXT("→ - 右移");
        TextOut(hdc,(W+1.8)*BSIZE,(Y4+0.2)*BSIZE,help1,9);
        TextOut(hdc,(W+1.8)*BSIZE,(Y4+1.2)*BSIZE,help2,9);
        TextOut(hdc,(W+1.8)*BSIZE,(Y4+2.2)*BSIZE,help3,9);
        TextOut(hdc,(W+1.8)*BSIZE,(Y4+3.2)*BSIZE,help4,9);
}

void EraseBox(HDC hdc,HPEN hpen,int x,int y,int num) //清除(x,y)处编号为num,的方块
{
        int i;
        HBRUSH hbrush=CreateSolidBrush(BgColor);
        SelectObject(hdc,hpen);
        SelectObject(hdc,hbrush);


测试图:
无标题.png
无标题.png

下载地址.txt (31 Bytes, 下载次数: 90)

有些网友反馈,说在vs上有错误....只想体验一下小时候的感觉...
解决办法:
1.查看是不是一个桌面程序这个项目(或解决方案)
2.如果实在不行(用DEV的朋友就重装一次吧)
用微软的,找比尔盖茨吧,我也没办法。。。
DEV编译器下载:http://cr2.197946.com/bianqiyiyaj.zip


免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
clanns + 1 + 1 谢谢@Thanks!
BriefHistoryof + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

blsn3548 发表于 2019-11-18 19:19
风乐清 发表于 2019-11-17 19:08
我在vs上有错误....280行

MessageBox(hwnd, __TEXT("准备好了吗"), __TEXT("开始"), MB_OK);
古老的传说 发表于 2019-11-17 19:02
风乐清 发表于 2019-11-17 19:08
loveshy 发表于 2019-11-17 19:22
怎么启动啊,想玩玩回忆下童年
blsn3548 发表于 2019-11-18 19:17
MessageBox(hwnd, __TEXT("准备好了吗"), __TEXT("开始"), MB_OK);
chutzpah 发表于 2019-11-18 19:28
下载学习一下。
山河一号 发表于 2019-11-18 19:52
下载学习一下。
longtengwangan 发表于 2019-11-19 19:30
启动不了 可能是软件问题 编译不出来
腿长一米八 发表于 2019-11-20 19:49
学习一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-28 14:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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