P1000 超级玛丽游戏
Posted 熬夜写代码的小编
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1000 超级玛丽游戏相关的知识,希望对你有一定的参考价值。
题目背景
本题是洛谷的试机题目,可以帮助了解洛谷的使用。
题目描述
超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。
********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
输入格式
无
输出格式
如描述
输入输出样例
无
说明/提示
#include <bits/stdc++.h>
using namespace std;
int main()
//freopen("~~~in","r",stdin);
//freopen("~~~out","w",stdout);
cout<<" ********\\n";
cout<<" ************\\n";
cout<<" ####....#.\\n";
cout<<" #..###.....##....\\n";
cout<<" ###.......###### ### ###\\n";
cout<<" ........... #...# #...#\\n";
cout<<" ##*####### #.#.# #.#.#\\n";
cout<<" ####*******###### #.#.# #.#.#\\n";
cout<<" ...#***.****.*###.... #...# #...#\\n";
cout<<" ....**********##..... ### ###\\n";
cout<<" ....**** *****....\\n";
cout<<" #### ####\\n";
cout<<" ###### ######\\n";
cout<<"##############################################################\\n";
cout<<"#...#......#.##...#......#.##...#......#.##------------------#\\n";
cout<<"###########################################------------------#\\n";
cout<<"#..#....#....##..#....#....##..#....#....#####################\\n";
cout<<"########################################## #----------#\\n";
cout<<"#.....#......##.....#......##.....#......# #----------#\\n";
cout<<"########################################## #----------#\\n";
cout<<"#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\\n";
cout<<"########################################## ############\\n";
return 0;
P1001 A+B Problem
题目背景
强烈推荐新用户必读帖。
不熟悉算法竞赛的选手请看这里:
算法竞赛中要求的输出格式中,不能有多余的内容,这也包括了“请输入整数 �a 和 �b” 这一类的提示用户输入信息的内容。若包含了这些内容,将会被认为是 Wrong Answer
,即洛谷上的 WA
。在对比代码输出和标准输出时,系统将忽略每一行结尾的空格,以及最后一行之后多余的换行符。
若因此类问题出现本机(看起来)AC
,提交 WA
的现象,请勿认为是洛谷评测机出了问题,而是你的代码中可能存在多余的输出信息。用户可以参考在题目末尾提供的代码。
另外请善用应用中的在线 IDE 功能,以避免不同平台的评测中所产生的一些问题。
还有一点很重要的是,请不要在对应的题目讨论区中发布自己的题解,请发布到题解区域中,否则将处以删除或禁言的处罚。若发现无法提交题解则表明本题题解数量过多,仍不应发布讨论。
题目描述
输入两个整数 �,�a,b,输出它们的和(∣�∣,∣�∣≤109∣a∣,∣b∣≤109)。
注意
- Pascal 使用
integer
会爆掉哦! - 有负数哦!
- C/C++ 的 main 函数必须是
int
类型,而且 C 最后要return 0
。这不仅对洛谷其他题目有效,而且也是 NOIP/CSP/NOI 比赛的要求!
好吧,同志们,我们就从这一题开始,向着大牛的路进发。
任何一个伟大的思想,都有一个微不足道的开始。
输入格式
两个以空格分开的整数。
输出格式
一个整数。
输入输出样例
输入 #1复制
20 30
输出 #1复制
50
说明/提示
广告
洛谷出品的算法教材,帮助您更简单的学习基础算法。【官方网店绝赞热卖中!】>>>
本题各种语言的程序范例:
C
#include <stdio.h>
int main()
int a,b;
scanf("%d%d",&a,&b);
printf("%d\\n", a+b);
return 0;
C++
#include <iostream>
#include <cstdio>
using namespace std;
int main()
int a,b;
cin >> a >> b;
cout << a+b << endl;
return 0;
Pascal
var a, b: longint;
begin
readln(a,b);
writeln(a+b);
end.
Python2
s = raw_input().split()
print int(s[0]) + int(s[1])
Python3
s = input().split()
print(int(s[0]) + int(s[1]))
Java
import java.io.*;
import java.util.*;
public class Main
public static void main(String args[]) throws Exception
Scanner cin=new Scanner(System.in);
int a = cin.nextInt(), b = cin.nextInt();
System.out.println(a+b);
javascript (Node.js)
const fs = require('fs')
const data = fs.readFileSync('/dev/stdin')
const result = data.toString('ascii').trim().split(' ').map(x => parseInt(x)).reduce((a, b) => a + b, 0)
console.log(result)
process.exit() // 请注意必须在出口点处加入此行
Ruby
a, b = gets.split.map(&:to_i)
print a+b
<?php
$input = trim(file_get_contents("php://stdin"));
list($a, $b) = explode(' ', $input);
echo $a + $b;
Rust
use std::io;
fn main()
let mut input=String::new();
io::stdin().read_line(&mut input).unwrap();
let mut s=input.trim().split(' ');
let a:i32=s.next().unwrap()
.parse().unwrap();
let b:i32=s.next().unwrap()
.parse().unwrap();
println!("",a+b);
Go
package main
import "fmt"
func main()
var a, b int
fmt.Scanf("%d%d", &a, &b)
fmt.Println(a+b)
C# Mono
using System;
public class APlusB
private static void Main()
string[] input = Console.ReadLine().Split(' ');
Console.WriteLine(int.Parse(input[0]) + int.Parse(input[1]));
Visual Basic Mono
Imports System
Module APlusB
Sub Main()
Dim ins As String() = Console.ReadLine().Split(New Char()" "c)
Console.WriteLine(Int(ins(0))+Int(ins(1)))
End Sub
End Module
Kotlin
fun main(args: Array<String>)
val (a, b) = readLine()!!.split(' ').map(String::toInt)
println(a + b)
Haskell
main = do
[a, b] <- (map read . words) `fmap` getLine
print (a+b)
Scala
object Main extends App
println(scala.io.StdIn.readLine().split(" ").map(_.toInt).sum)
Perl
my $in = <STDIN>;
chomp $in;
$in = [split /[\\s,]+/, $in];
my $c = $in->[0] + $in->[1];
print "$c\\n";
P1008 [NOIP1998 普及组] 三连击
题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1,2,…,91,2,…,9 共 99 个数分成 33 组,分别组成 33 个三位数,且使这 33 个三位数构成 1:2:31:2:3 的比例,试求出所有满足条件的 33 个三位数。
输入格式
无
输出格式
若干行,每行 33 个数字。按照每行第 11 个数字升序排列。
输入输出样例
输入 #1复制
无
输出 #1复制
192 384 576 * * * ... * * * (剩余部分不予展示)
超级玛丽需求分析
经典游戏超级玛丽需求分析
分析目的: 超级玛丽作为一款最早出现在 FC 平台上的闯关探索游戏,是一代经典。由超级玛丽角色本身所衍生出各种超级玛丽系列游戏可以说是游戏业内最早也是教科书般的产品衍生典范。例如超级马里奥,马里奥赛车等,都已经在超级玛丽的形象和游戏模式上进行了再改造,并取得了极大的成功。
本文通过分析经典 FC 版超级玛丽的游戏首轮关卡设计,向大家展示这个经典游戏的细节设计迷人之处。其设计思想也或多或少的影响了业内游戏发展的设计思路。
一、登陆界面
1-1 登陆页面
这个登陆界面(1-1 登陆页面)可以说是最早期的登陆页面概念,相比现在的游戏,FC 平台的超级玛丽把游戏模式(1P )作为玩家选择,直接用游戏中的 UI 来作为背景,让玩家在第一时间即获取了这个游戏的所有界面信息(分数、获得金币、关卡进度、用时)。
如下图 1-2,此时因为登陆 UI 直接使用了游戏本身界面,整体画面变动连续性极强,并未感到唐突,反而让用户有一丝惊喜。随后需要玩家所控制的角色自动会向前行走,并完成一些动作,让玩家明白游戏的基础操作机制。
1-2 游戏教程
二、进入游戏
2-1 进入游戏信息界面
当玩家进入游戏后(图 2-1),则画面将背景色变成黑色,保留了上方的信息(分数、金币量、关卡数、时间),并在中间突显了关卡数与新信息生命数。界面设计色彩对比强,再次明确了上方的 4 个信息点,并通过彩色的人物与居中的位置向玩家传达最关键的新信息,人物的生命数。随后画面转向人物出生初始界面(图 2-2)该界面与刚开始登陆界面(图1-1)几乎一致。人物初始位置较为考究。全图共同时显示 16 个方格为一个整屏,人物出生
位置选择了全屏幕一半 8 个格子的再一半 4 个格子,并稍稍偏左,且人物面向朝右。该设计提供了大量心理暗示。玩家开始玩游戏时并不会对到底往左还是往右走产生太多的迷茫,绝大部分玩家都会下意识选择向右,保证了游戏的接下来机制的正常出现;而个别好奇心很强的玩家向左行动后立刻会发现无法通行,转而进入向右的流程。玩家在向右移动时,人物始终会保持在屏幕的中间,即第八个方块位置,而开始界面极为空旷的页面给了玩家极大的自我尝试的空间,玩家可以不必担心任何陷阱或者敌人造成自己的死亡,可以让玩家最快的进入操作状态。
2-2 初始人物出生界面
三、地图元素的出现
3-1 第一次的地图元素出现
当玩家向右行动后,地图元素会立刻出现。一个带着“?”问好的方块引导玩家去接近,而接近的路上则是一个小蘑菇缓缓向左移动。一般情况下玩家会下意识的认为这个蘑菇是一个阻碍我去探索“?”问号的敌人。游戏设计者也确实进行了心理暗示。心理暗示包括两点,第一点是蘑菇的带有非常清晰的表情,眉毛被非常清晰的展现出来,微微上翘暗示来者不善。第二点是蘑菇的移动方向与玩家行动方向成相反方向,人在潜意识中会把与自己相对立的人或者物默认的先划归为敌对。于是,游戏设计师通过一个目的,即探索问号方块,和一个阻碍,即一个可能是敌人的蘑菇,成功建立了玩家与游戏互动的基础,就是玩家需要为了探索方块不断的穿过障碍前进。随后的情况就看玩家自己的选择,通过图 3-2,3-3,3-4 三种情况,玩家都能获取一定的信息量。
图 3-2 触碰蘑菇死亡的玩家会确定,蘑菇是一个不可触碰的敌对角色,而玩家死亡后会立刻重新加载图 2-1 界面,并告诉玩家这是死亡且消耗一条生命;图 3-3 通过跳跃跨过蘑菇的玩家会明白,蘑菇只会一直向左走且不会回头,并且这类玩家心中依然是敌对状态;
图 3-4 通过跳跃正好踩中的玩家发现蘑菇是一个可以被消灭的角色,并能够获得积分。无论是哪一类玩家,都能通过自己的决策获取一定的信息量,即使是碰撞蘑菇的死亡也能因为游戏刚开始进程使得玩家能立刻重新回到游戏中,不会产生任何重复疲劳感。快速的多次尝试,往往是让玩家建立一个游戏意识最好的方法。而随着游戏进程的推进,这个信息库也会因为玩家的行为变得越来越完整。
3-2 碰撞蘑菇死亡
3-3 跨越蘑菇
以上是关于P1000 超级玛丽游戏的主要内容,如果未能解决你的问题,请参考以下文章