俄罗斯方块

【C语言】俄罗斯方块的源代码 GitHub:【C语言】实现俄罗斯方块源代码Head.h#ifndef _HEAD_H_ #define _HEAD_H_#include<graphics.h> #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> #include<string.h> #define _CRT_SECURE_NO_WARNI 阅读详情

俄罗斯方块


题目描述

相信大家都玩过“俄罗斯方块”游戏吧,“俄罗斯方块”是一个有趣的电脑小游戏,现有一个有C列、行不受限定游戏平台,每一次下落的方块是下列的7个图形的一种:
在这里插入图片描述
在下落的过程中,游戏者可以作90、 180或270 度旋转,还可以左右移动,对于每一次方块落地,我们要求方块的每一部分都必须与地面(最底面或己落下的方块上表面)接触,例如,有一个宽度为6列的平台,每一列的初始高度(已经占用的方格数)分别为2, 1, 1, 1, 0 和 1。编号为5的方块下落,有且仅有5种不同的落地方法:
在这里插入图片描述
现给出每一列的初始高度和下落方块的形状,请你编写一个程序,求出落地的方法总数,也就是落地后,地表面形成的不同的形状总数。

输入格式

第一行为二个整数C和P,1 ≤ C ≤ 100, 1 ≤ P ≤ 7,表示列数和下落方块的编号
第二行共有用一个空隔隔开的C个整数,每一个数字在 0 到 100,之间(包含0和100),表示每一列的初始高度。

输出格式

输出为一个整数,表示落地的方法总数。

样例输入

Input1
6 5
2 1 1 1 0 1
Input2
5 1
0 0 0 0 0
Input3

9 4
4 3 5 4 6 5 7 6 6

样例输出

Output1
5
Output2
7
Output3
1

解题思路

这道题其实只需要暴力枚举就可以了,但我考试的时候还是没做出来 ,话不多说,直接上代码

#include<iostream>
#include<cstdio>
using namespace std;

int n,c,star[110],ans;

int main()
{
	scanf("%d%d",&c,&n);
	for(int i=1;i<=c;i++)
		scanf("%d",&star[i]);
	if(n==1)
	{
		ans=c;
		for(int i=1;i<=c-3;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2]&&star[i]==star[i+3])
				ans++;
	}
	if(n==2)
	{	
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1])
				ans++;
	}
	if(n==3)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2]-1)
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]-1==star[i+1])
				ans++;
	}
	if(n==4)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]-1==star[i+1]&&star[i+1]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i+1]-1==star[i])
				ans++;
	}
	if(n==5)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]-1==star[i+1])
				ans++;
		for(int i=1;i<=c-2;i++)
			if(star[i]-1==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1]-1)
				ans++;
	}
	if(n==6)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]-2==star[i+1])
				ans++;
		for(int i=1;i<=c-2;i++)
			if(star[i]+1==star[i+1]&&star[i+1]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1])
				ans++;
	}
	if(n==7)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1]-2)
				ans++;
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i+1]==star[i+2]+1)
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1])
				ans++;
	}
	printf("%d",ans);
}

你以为就这样完了吗?没那么简单!其实你们有没有发现,第4个和第3正好反过来,第7个和第6个也是,所以其实在输入第4个和第7个的时候,倒过来输入,并进行3和6的操作就可以了!代码如下:

#include<iostream>
#include<cstdio>
using namespace std;

int n,c,star[110],ans;

int main()
{
	scanf("%d%d",&c,&n);
	for(int i=1;i<=c;i++)
		scanf("%d",&star[i]);
	if(n==1)
	{
		ans=c;
		for(int i=1;i<=c-3;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2]&&star[i]==star[i+3])
				ans++;
	}
	if(n==2)
	{	
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1])
				ans++;
	}
	if(n==3)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2]-1)
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]-1==star[i+1])
				ans++;
	}
	if(n==4)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]-1==star[i+1]&&star[i+1]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i+1]-1==star[i])
				ans++;
	}
	if(n==5)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]-1==star[i+1])
				ans++;
		for(int i=1;i<=c-2;i++)
			if(star[i]-1==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1]-1)
				ans++;
	}
	if(n==6)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]-2==star[i+1])
				ans++;
		for(int i=1;i<=c-2;i++)
			if(star[i]+1==star[i+1]&&star[i+1]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1])
				ans++;
	}
	if(n==7)
	{
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i]==star[i+2])
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1]-2)
				ans++;
		for(int i=1;i<=c-2;i++)
			if(star[i]==star[i+1]&&star[i+1]==star[i+2]+1)
				ans++;
		for(int i=1;i<=c-1;i++)
			if(star[i]==star[i+1])
				ans++;
	}
	printf("%d",ans);
}

这道题思路是挺简单,就是代码麻烦了点。可我还是没有在考试时做出来

C++俄罗斯方块 前言 一个礼拜前想做一个俄罗斯方块小游戏,因为想用c++实现,但又受制于界面,于是苦读了几天的Qt。昨天开工连带一个不眠夜,总算是大功告成,个中滋味,怕是只有自己知道。 简介 俄罗斯方块,c++,qt。 功能:常规俄罗斯方块具有的:方块旋转,左移,右移,下落加速,消行,提示下一块样式等等都已实现。同时实现了记分以及暂停的功能。 效果图游戏过程效果图暂停效果图游戏结束效果图实现思路 阅读详情

相关推荐

Python俄罗斯方块设计

摘要 本程序用Python语言编写俄罗斯方块游戏,左侧显示正在运行的游戏,右上角会显示下一个出现的形状。游戏运行时随着分数的增大而速度加快。本程序利用Python设计实现俄罗斯方块游戏的算法、游戏内部功能、游戏区域的绘图的程序设计。对于每个俄罗斯方块各自的形态变化改变到下一个形态利用数组来实现。 一.引言 背景 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多

lhk_csdn的博客 7371

基于51单片机的俄罗斯方块游戏

俄罗斯方块游戏算法 请参考俄罗斯方块游戏的算法 1.概述 俄罗斯方块是一款风靡全球的益智游戏。它规则简单,容易上手,且游戏过程变化无穷,使用户在游戏中得到乐趣。  本设计是采用单片机来实现的智能俄罗斯方块游戏,该设计选用的处理器型号为AT89C51的单片机。重点从软件工程角度论述了俄罗斯方块模型构造,图形旋转,坐标变换,双人游戏中多任务实时操作的设计方法与实现。 2.硬件设计 总体电路图 硬...

会飞的鱼的博客 1万+

Python实现俄罗斯方块

俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块。但是想到旋转,停靠,消除等操作,感觉好像很难啊,等真正写完了发现,一共也就 300 行代码,并没有什么难的。

不脱发的程序猿 4323

手撸俄罗斯方块(一)——简单介绍

如何手撸一个俄罗斯方块,从0开始,让code说话。

【蜀山风行】的专栏 2599

俄罗斯方块:经典游戏机制与策略详解

本文还有配套的精品资源,点击获取 简介:自1984年问世以来,《俄罗斯方块》以其独特的游戏玩法和无限的挑战性成为全球玩家的挚爱。游戏包括随机生成的七种不同形状方块,以及移动、旋转和消除行的机制,旨在通过不断加快的下落速度考验玩家的反应和策略。此外,通过消除行数获得分数并追求连消来提高分数,是这款游戏的核心体验。合理的游戏策略和技巧能够帮助玩家保持游戏的连贯性和最终的胜利。 ...

weixin_42433737的博客 5599

C++ 连连看

使用C++编码的连连看游戏,功能较为简单,可以作为课程设计的参考。

Android 手表版俄罗斯方块

这个游戏原来不是为了圆型屏幕设计的,我对其做了很多调整。软件已经设置了自动发货,下单即可获得网盘下载链接。

杨铸人的博客 514

俄罗斯方块大全

有关于俄罗斯方块,颜色调整,线程处理,逻辑关系等问题的分析。

C++【EasyX】俄罗斯方块

文章目录一、前言二、效果三、实现流程1、界面设计2、方块元素设计3、俄罗斯方块设计 一、前言 说起来真是很巧,写这个俄罗斯方块前一天晚上突然在B站看到一条视频,说是33行代码实现俄罗斯方块。然后脑海里想起了EasyX村长的话,大概是说一直写到能写出俄罗斯方块才能算勉强合格。 于是晚上睡之前心血来潮,心想,我也要写出来一个俄罗斯方块! 二、效果 效果如下图所示: 三、实现流程 1、界面设计 ...

God-Excious的博客 1万+

魂斗罗游戏源码

经典怀旧游戏魂斗罗,C++编写,音效+素材+源码,可下载vs运行看效果

俄罗斯方块.sh

用linux的shell脚本写的俄罗斯方块,很好的学习shell编程的资源!

【C语言】实现俄罗斯方块

学习了C语言,写一个俄罗斯方块,代码绝对可以运行 大神勿笑,只适合初学者 本人也是菜鸟1、考虑怎么存储俄罗斯方块俄罗斯方块的形状一共有19种类型,如果拿数组来表示的话,可能会比较会浪费空间(网上有很多实现代码) 考虑到每种方块形状的范围是4 *4的小方块,用 字模点阵的方式来存储,即设置一个4行4列的数组,元素置1即代表这个位置有小 方块,元素置0即代表这个位置无小方块,这个整个的4

菜鸟成长记 6万+

LTSPICE使用教程:入门指导

LTSPICE仿真工具入门指导

焊武大帝的专栏 5万+

【俄罗斯方块】

首先把经典的俄罗斯方块简化一下:方块有顺序地从屏幕顶端掉下至底部,当碰到障碍物或底部时停下,同时变成新的障碍物。游戏规则规定,只能在方块下落停止前决定下落时的横向位置,使这个方块编程障碍物后的高度最低,且如果有集中横向位置是这个方块编程障碍物后高度最低时,取最左边的横向位置下落。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3404

AAAI 2025杰出论文解读:神经符号推理与生物多样性计算的突破性进展

本文深度解读了AAAI 2025两篇杰出论文的突破性进展。南京大学周志华团队提出“溯因反射”框架,高效解决神经符号推理中的“不一致性”核心难题,为构建可靠、可解释的AI系统提供了新路径。斯坦福大学等机构的DiVShift研究,则系统分析了公民科学数据中的复杂分布偏移,为利用海量数据精准监测生物多样性及应对AI数据偏差提供了关键方法论。

weixin_29085865的博客 501

QMT vs Ptrade:量化交易新手如何根据需求选择券商系统(附实战案例)

本文对比了QMT和Ptrade两大券商量化交易系统的核心差异,帮助量化交易新手根据需求选择合适的平台。QMT适合技术面策略开发,执行效率高;Ptrade则提供全面的财务数据和复杂策略支持。通过实战案例,展示了如何结合两平台优势实现高效量化交易。

weixin_42683394的博客 527

基于FPGA的俄罗斯方块设计

《俄罗斯方块》是一款利用移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分的益智游戏。本项目利用EGO1平台开发板,通过USB接口连入键盘,VGA端口连入显示器的方式,通过状态机的思路进行图像的变换和输出,利用PS2协议进行键盘按键信号的输入,利用EGO1平台携带的数码管进行计分方式的输出,最终实现了简易的俄罗斯方块小游戏。

weixin_47108207的博客 6236

PCIE配置和地址空间

来源:https://www.jianshu.com/p/574e9a2cbc4e 每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下: 图6.1 整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Brid.

qq_28643619的博客 4060

【Swing】——俄罗斯方块

该俄罗斯方块版本是教主第二次写的,也算是一次重构,主要有三个目标: 1. 一是“大道至简”,用最简单的逻辑实现俄罗斯方块的功能; 2. 二是“逻辑与视图分离”,解开游戏运行的逻辑与Swing渲染的耦合; 3. 三是记录Swing,记录一下Swing的简单使用方法。

十二翼堕落天使 3890

具身智能(26):RDK S100的LeRobot或Agile X piper机械臂控制模型

本文档详细介绍了基于ROS2的机器人控制模型架构与标定数据联动机制。核心采用"感知-规划-控制"闭环流程,通过激光雷达、相机和IMU的融合数据实现厘米级定位(≤1cm)。文档包含两大控制模型配置:1)RDKLeRobot模型,重点说明PID参数调节和标定文件路径设置;2)AgileXPiper模型,强调驱动安装与外部标定文件集成。针对常见问题提供解决方案,如控制指令无响应需验证标定路径,运动偏差过大需重新标定等。最后给出批量部署方案,通过复制基准配置文件实现多机器人快速配置,要求定位偏差

码农17年的博客 179

成对使用离轴抛物面反射镜的设计

成对使用离轴抛物面反射镜的设计

weixin_72050316的博客 638

Javascript实现俄罗斯方块

JS实现俄罗斯方块 视频教程: JavaScript开发俄罗斯方块 代码地址: Tetris-based-on-JS 1.初始化布局 我们设置Game为中介者类 你会发现我们的Game.js文件的最外层是用IIFE包裹起来的,因为我们需要知道实际工作中都是多个类进行并行开发的,由于为了上生产,会将代码进行打包部署,也就是将所有的js文件打包为个js文件,如果没有IIEF会造成作用域和命名的冲突,所以我们用IIFE隔离作用域。 (function () { window.Game = function (

qq_24293765的博客 4102

WorkBuddy KiCad 实战:国产 AI 搭子不只会写代码,传感器板从零走到可审查

真正可用的 PCB 教程不能承诺“一键打样”。本课把 WorkBuddy 放在需求拆分、文件生成和审查记录的位置,KiCad 负责 ERC、DRC 与制造文件,工程师负责最终判断。 本课不会用“AI 一键完成”制造错觉,而是把 WorkBuddy、KiCad 8.0、Python 3.11 与人工审阅组成一条可复现链路。你会从“已确认的接口表、器件库来源、板框与电源方案”出发,得到“KiCad 工程、原理图、初始 BOM、ERC 报告与审查记录”,并学会用真实命令、错误信号和停止条件判断成果能不能进入下一阶

yueyeguzhuo的专栏 217
上一篇: 【洛谷P2141】珠心算测验
下一篇: 【洛谷P1434】滑雪
SSL_GYX
博客等级 码龄7年 103粉丝 297原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值