大一作品,留念

#include<stdio.h>
#include<time.h>
#include<conio.h>//kbhit
#include<stdlib.h>//rand,srand
#include<windows.h>
#define wide 15
#define hight 18
#define period 500
typedef struct point
{int h;int w;
}point;/*
1 ■■■■                 1*4 -> 4*1■             ■2■■■   3 ■■■         2*3 -> 3*2■■          ■■       2*3 -> 3*24 ■■         5     ■■■■             ■6 ■■   2*2  7  ■■■      2*3->3*2最大面积为4*41234     ■■■■1234        ■■■■1234        ■■■■1234        ■■■■按W键旋转九十度*/char map[hight][wide]={0};//1:□ 2:■  其余的都是空格 char类型节约空间
char stay[hight][wide]={0};//残留方块
struct point size;//活动方块的大小 前一个代表 高度 后一个代表 宽度 ,主要用于触碰处理
char sqr[4][4];//活动方块数组
struct point posi={1,wide/2-2};//方块顶点坐标
char situ=0;//旋转状况0 正常 1 顺时针90度 2:180 3:270
int grade=0,line=0;
//char sqr[4][4];
//point newspr={1,wide/2};
//------------函数声明void showmap();void setmap();int keypre(char k);//按下某键int getrand(int,int);//取一个范围内的随机数int setini(int type);//初始化方块,类型,看表吧void turn90();int isagain();//判断活动区是否与stay区重复int exsqr(char row);//判断stay区某一行是否存在方块,存在返回1,不存在返回0void judge();//层满处理
int main()
{int last=0,t;int i;srand(time(NULL));//随机图形setini(getrand(1,7));//屏幕渲染do{t=clock();if(t-last>=period){//周期性刷新last=t;system("cls");if(keypre('s')==0)break;setmap();printf("-----------当前分数:%d,已消除行:%d-----------\n",grade,line);showmap();}if(kbhit()==1){system("cls");if(keypre(getch())==0)break;setmap();printf("-----------当前分数:%d,已消除行:%d-----------\n",grade,line);showmap();}}while(1);system("cls");printf("----------------得分:%d   消除:%d-------------------\n",grade,line);setmap();showmap();printf("----------------游戏结束!谢谢玩耍!----------------\n");printf("按回车键退出!\n");while(getchar()!='\n');return 0;
}int keypre(char k)//按下某键
{int i,j,real=0;char top[wide];if(k=='s'){posi.h++;if(isagain())//下一步是否会重合real=1;//那么下一步不能走了//留在当前位置if(real){grade+=18;//留步加分posi.h--;//留在上一步for(i=0;i<size.h ;i++)//就留下来了{for(j=0;j<size.w;j++){if(sqr[i][j]==2)//只记录实体stay[i+posi.h][j+posi.w ]=2;}}//出新的judge();//层满判断return (setini(getrand(1,7)));}}else if(k=='a'||k=='A'){posi.w --;if(isagain())posi.w ++;//移动取消}else if(k=='d'||k=='D'){posi.w ++;if(isagain())posi.w --;//移动取消}else if(k=='w'||k=='W')turn90();else if(k=='s'||k=='S'){posi.h++;if(isagain())posi.h --;//移动取消}//左右分界判断if(posi.w+size.w>wide-1)posi.w=wide-1-size.w;if(posi.w <1)posi.w=1;return 1;}
void setmap()//初始化地图,并置
{int i,j;//画地图区域for(i=0;i<hight;i++){for(j=0;j<wide;j++){if(i==0||i==hight-1||j==0||j==wide-1)map[i][j]=1;//边界elsemap[i][j]=0;//空白}}//画活动方块for(i=0;i<size.h ;i++){for(j=0;j<size.w ;j++){map[posi.h+i][posi.w+j]=sqr[i][j];}}//画残留for(i=0;i<hight;i++){for(j=0;j<wide;j++){if(stay[i][j]==2)map[i][j]=2;}}
}
//将数组转换为图形
void showmap()
{int i,j;for(i=0;i<hight;i++){for(j=0;j<wide;j++){if(map[i][j]==1)printf("□");else if(map[i][j]==2)printf("■");elseprintf("  ");}printf("\n");}
}int getrand(int min,int max)//取一个范围内的随机数
{return (min+rand()%(max-min+1));
}void turn90()//活动方块顺时针旋转九十度
{int i,j;char a[4][4];//临时变量char temp[4][4];//方块备份for(i=0;i<4;i++)for(j=0;j<4;j++)temp[i][j]=sqr[i][j];for(i=0;i<4;i++)for(j=0;j<4;j++)a[j][i]=sqr[i][j];//斜线对称//左右对称,即是转动九十度i=size.h ;size.h =size.w;size.w =i;for(i=0;i<size.h ;i++)for(j=0;j<size.w ;j++)sqr[i][size.w-1-j]=a[i][j];if(isagain())for(i=0;i<4;i++)for(j=0;j<4;j++)sqr[i][j]=temp[i][j];}int setini(int type)//初始化方块,类型,看表吧
{int i,j;for(i=0;i<4;i++)for(j=0;j<4;j++)sqr[i][j]=0;//归零switch(type){case 1:size.h =1;size.w =4;sqr[0][0]=2;sqr[0][1]=2;sqr[0][2]=2;sqr[0][3]=2;break;case 2:size.h =2;size.w =3;sqr[0][0]=2;sqr[1][0]=2;sqr[1][1]=2;sqr[1][2]=2;break;case 3:size.h =2;size.w =3;sqr[0][2]=2;sqr[1][0]=2;sqr[1][1]=2;sqr[1][2]=2;break;case 4:size.h =2;size.w =3;sqr[0][1]=2;sqr[0][2]=2;sqr[1][0]=2;sqr[1][1]=2;break;case 5:size.h =2;size.w =3;sqr[0][0]=2;sqr[0][1]=2;sqr[1][1]=2;sqr[1][2]=2;break;case 6:size.h =2;size.w =2;sqr[0][0]=2;sqr[0][1]=2;sqr[1][0]=2;sqr[1][1]=2;break;case 7:size.h =2;size.w =3;sqr[0][1]=2;sqr[1][0]=2;sqr[1][1]=2;sqr[1][2]=2;break;}posi.h =1;posi.w =(wide-size.w )/2;if(isagain())//刚刚初始化你就重合了,你说你是不是挂了?return 0;return 1;/* 1 ■■■■                 1*4 -> 4*1■             ■2■■■   3 ■■■         2*3 -> 3*2■■          ■■       2*3 -> 3*24 ■■     5    ■■■■             ■6 ■■   2*2  7  ■■■      2*3->3*2*/
}
void judge()//层满处理
{int i,j,full,k,esqr;for(i=1;i<hight-1;i++)//除掉边界{full=1;for(j=1;j<wide-1;j++)//除掉边界{if(stay[i][j]!=2)//存在不为方块的full=0;//假空}if(full)//真空{line++;//已消除grade+=90;//消除加五倍分数for(j=1;j<wide-1;j++)//除掉边界stay[i][j]=0;//置零}}//全部除完之后for(i=hight-2;i>=2;i--){int s=i;if(exsqr(i)==0)//本层为空{//上层下移while(s>=1 && exsqr(--s)==0)//该层不存在方块//继续向上寻找;for(j=1;j<wide-1;j++){stay[i][j]=stay[s][j];//上层下移stay[s][j]=0;//上层清空}}}
}int isagain()//判断活动区是否与stay区重复
{int i,j;for(i=0;i<size.h ;i++){for(j=0;j<size.w ;j++){if(sqr[i][j]==2)//是实体,i,j是框内代号{if(posi.h +i >hight-2)return 1;else if(stay[posi.h +i][posi.w +j]==2)//框内位置转换为map位置return 1;}}}return 0;//未重复}int exsqr(char row)//判断stay区某一行是否存在方块,存在返回1,不存在返回0
{int j;for(j=1;j<wide-1;j++)//出掉边界if(stay[row][j]==2)return 1;return 0;
}

转载于:https://www.cnblogs.com/tinyjian/p/6550718.html

【小游戏】俄罗斯方块(C++版)相关推荐

  1. Pascal小游戏 俄罗斯方块怀旧版

    俄罗斯方块怀旧版(注释版) {$APPTYPE GUI} {$MODE DELPHI} program WinPiece; uses Windows; const AppName = 'WinPiec ...

  2. 鸿蒙小游戏-俄罗斯方块

    作者:225王宗振 前言 为了更好地熟练掌握鸿蒙手机应用开发,查阅资料和算法尝试开发鸿蒙小游戏--俄罗斯方块. 概述 完成鸿蒙小游戏APP在手机上的编译在项目中所使用到的软件为DevEco Studi ...

  3. Windows经典小游戏--扫雷精装版

    Windows经典小游戏–扫雷精装版 最开始玩的电脑游戏就是蜘蛛纸牌和扫雷了,那时候觉得很神奇的事情现在自己也可以做了.下面就展示一下C语言扫雷的代码. 首先创建一个"扫雷"的项目 ...

  4. H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码,实现了跳一跳的基本核心功能

    H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码,实现了跳一跳的基本核心功能 完整代码下载地址:H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码 运行截图 Project setup ...

  5. 原生js小游戏——俄罗斯方块

    还记得童年时期的小游戏俄罗斯方块吗?我发现用js就可以写出来 页面效果如下: 具体代码如下: 首先展示css样式: .c {margin: 1px;width: 19px;height: 19px;b ...

  6. python tkinter火柴人_用Python实现童年小游戏俄罗斯方块!别说还挺好玩!

    原标题:用Python实现童年小游戏俄罗斯方块!别说还挺好玩! 前言 大三上学期的程序设计实训大作业,挑了其中一个我认为最简单的的<图书管理系统>来写.用python写是因为py有自带的G ...

  7. matlab飞机大战小游戏(第二版)

    第一版链接:https://blog.csdn.net/slandarer/article/details/88025006 游戏截图: ------------------------ 游戏动图: ...

  8. Java小游戏-俄罗斯方块

    摘 要 随着时代的不断发展,个人电脑也在不断普及,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或工作之余休闲娱乐的首选,从最开始的Windows系统自带的黑白棋.纸牌.扫雷等游戏开始,到现在目不 ...

  9. C++实现2048小游戏(控制台版的)

    无聊,在公司写了个2048小游戏的程序,聊以自娱.(事实是我手机坏了,没得玩). 很简单,直接上代码了. #include <iostream> #include <windows. ...

  10. python实现小游戏论文_用Python实现童年小游戏俄罗斯方块

    在那个电子产品比较匮乏的年代,小游戏机 还是为数不多的游戏类电子产品,对小孩子更是有着不可抗拒的魔力,在当时如果哪个小孩买了一个小游戏机,大伙一定迅速围上去... 俄罗斯方块作为其中一款小游戏,尽管规 ...

最新文章

  1. 从零开始写一个迷你版的Tomcat
  2. mysql授权其他用户导出数据_mysql创建账号、授权、数据导出、导入
  3. java 商城 jfinal,Jfinal开发农副产品电子商城系统,完整前后台系统
  4. 教你用Python爬取图虫网
  5. python脚本实例手机端-Python脚本实现自动化Android手机apk安装实例
  6. [asp.net]网站数据安全之验证码
  7. 【数据库】数据库系统的结构(概念篇详解)
  8. css圆在中心根据宽度缩放_根据CSS中的容器宽度重新缩放字体
  9. setsockopt设置socket状态
  10. 关于UploadValues ,太可恶了
  11. .jar文件无法运行的解决方法
  12. java zk_zk框架:zul文件,純Java或混合更好的性能
  13. python极简讲义 pdf_Python极简讲义:一本书入门数据分析与机器学习
  14. 思科 Cisco CCNA 题库、
  15. 谷歌翻译影响vue_[Vue源码分析]谷歌翻译后,Vue双向数据绑定失效了?
  16. 小程序设置page背景图片透明度
  17. Unity的AudioMixer真香?
  18. 【高等数学】方差的集合意义
  19. 用python对《三国演义》的人物出场进行统计
  20. vm虚拟机分配处理器_虚拟机处理器核数与物理cpu的关系

热门文章

  1. 吴钩:打开宋代的“隐藏玩法”
  2. linux安装mongo卸载mongo,CentOS7安装及卸载MongoDB.md
  3. android 集成同一interface不同泛型_C# 基础知识系列- 10 反射和泛型(二)
  4. linux date 天之前,linux date命令前后几天的推导
  5. python模糊匹配忽略大小写_在python中忽略大小写的简单方法?
  6. 比特币官方客户端钱包是用什么语言开发的_5种主流比特币客户端的开发选型...
  7. css中标签显示模式、块元素、行内元素、行内块元素、显示模式转换
  8. C++结构体作为函数参数传参
  9. 大数据统计学直观图表(二)
  10. 互联网日报 | 安邦保险集团将申请解散并清算;360中原总部落户郑州;英伟达400亿美元收购ARM...