说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

创建一个Windows Phone 7推箱子益智游戏

HTML文档下载 WORD文档下载 PDF文档下载
现在我们用Windows Phone 7创造一个益智游戏,使用Silverlight和XNA框架音频API的功能。

 

作者:Daniel Vaughan

 

下载源代码

 

介绍

 现在我们用Windows Phone 7创造一个益智游戏,使用Silverlight和XNA框架音频API的功能。

 

入门

 

安装WP7的工具

安装vs 2010 

安装程序将自动下载并安装所需的组件。

如果你想使用的Expression Blend 4 WP7的拓展,下载并安装Expression Blend 。

一旦安装过程完成后,重新启动Visual Studio 2010中。

 

游戏界面

这是主要的用户界面 PhoneApplicationPage。当你创建一个新的 Windows Phone 应用程序这是默认的代码。

 

PageOrientation

Windows Phone应用程式中一个重要的问题是与之匹配的布局方向,特别是检测到方向变化时,如何使我们的UI与之匹配。 PhoneApplicationPage有一个可设置的属性命名SupportedOrientations。该枚举值可以是横排(PORTRAIT)或竖排(LANDSCAPE),或者是PortraitOrLandscape的。分配给它一个值,无论是在XAML或代码中,我们可以控制应用程序如何能变换。我们采用PortraitOrLandscape,因为我希望用户根据自己的意愿自由选择。

一个值得注意的是,从用户代码设置方向是不可能的,因为它被标记为SecurityCritical。

 

SecurityCritical是大多数Silverlight开发人员熟悉的属性。 

请注意,这是Silverlight的安全,并没有具体到 Windows Phone。 

 

从反射,我们可以观察到Page.Orientation不是一个依赖项属性,(也不会引发Page.Orientation PropertyChanged事件),绑定到PhoneApplicationPage属性不会带到其它地方。

 

方向转换

我们可以简单地在OrientationChanged事件中处理,但我没有简单地这样做,而是在MainPage里创建依赖属性,当OrientationChanged事件发生时被调用。我创建了一个IValueConverter,当Page.Orientation属性改变,改变TextBlock的Visibility。

 

 

<TextBlock Visibility="{Binding ElementName=Page, Path=PageOrientation,     Converter={StaticResource OrientationToVisibilityConverter}, 				ConverterParameter= Landscape}" .../>
以下代码从OrientationToVisibilityConverter中摘录,展示了转换器改变PageOrientation来改变Visibility的值。

 

 

public object Convert(object value, Type targetType, 		object parameter, CultureInfo culture){	var orientation = (PageOrientation)value;	string showWhenOrientation = parameter.ToString().ToLower();	bool show = false;	switch (orientation)	{		case PageOrientation.Portrait:		case PageOrientation.PortraitDown:		case PageOrientation.PortraitUp:			show = showWhenOrientation == "vertical";			break;		case PageOrientation.Landscape:		case PageOrientation.LandscapeLeft:		case PageOrientation.LandscapeRight:			show = showWhenOrientation == "landscape";			break;	}	return show ? Visibility.Visible : Visibility.Collapsed;}
使用XNA Framework的音频API
我惊喜的是我们可以容易的使用XNA框架来播放音效。需要即时播放。被警告,但它有挑剔的格式。我发现,只有PCM格式的WAV文件提供了支持。我用GoldWave保存所有到PCM格式的音频。对于较长的片段,如果用MP3,更有意义,但你需要使用MediaElement控件。
所有的声音效果在MainPage.xaml.cs中的代码定义处,以下是代码演示:
readonly SoundEffect footStepSoundEffect = 	SoundEffect.FromStream(TitleContainer.OpenStream("Audio/Footstep.wav"));
然后我们可以向这样播放声音效果:
footStepSoundEffect.Play();
MainPage实例化过程中,有一个Game实例作为其指定DataContext。
主要是控制其所有活动数据绑定和游戏属性的变化。 MainPage如下所示:
<phoneNavigation:PhoneApplicationPage     x:Class="DanielVaughan.Sokoban.UI.MainPage"    x:Name="Page"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:phoneNavigation="clr-namespace:Microsoft.Phone.Controls;		assembly=Microsoft.Phone.Controls.Navigation"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     xmlns:controls="clr-namespace:DanielVaughan.Sokoban.UI"     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"    SupportedOrientations="PortraitOrLandscape"    FontFamily="{StaticResource PhoneFontFamilyNormal}"    FontSize="{StaticResource PhoneFontSizeNormal}"    Foreground="{StaticResource PhoneForegroundBrush}" Orientation="Landscape">    <phoneNavigation:PhoneApplicationPage.Resources>        <controls:OrientationToVisibilityConverter 		x:Key="OrientationToVisibilityConverter" />        <Style x:Key="CenterLabels" TargetType="TextBlock">            <Setter Property="Foreground" Value="White"/>            <Setter Property="FontSize" Value="18"/>            <Setter Property="VerticalAlignment" Value="Center"/>        </Style>        <Style x:Key="ToolBarWebdings" TargetType="Button">            <Setter Property="Background">                <Setter.Value>                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">                        <GradientStop Color="#FF9AFF95" Offset="0.21"/>                        <GradientStop Color="#FF5DD757" Offset="0.589"/>                        <GradientStop Color="#FF99FF93" Offset="1"/>                    </LinearGradientBrush>                </Setter.Value>            </Setter>            <Setter Property="FontFamily" Value="Webdings"/>            <Setter Property="Foreground" Value="White"/>            <Setter Property="Padding" Value="5 "/>        </Style>        <Style x:Key="OrdinaryButton" TargetType="Button">            <Setter Property="Background">                <Setter.Value>                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">                        <GradientStop Color="#FF9AFF95" Offset="0.21"/>                        <GradientStop Color="#FF5DD757" Offset="0.589"/>                        <GradientStop Color="#FF99FF93" Offset="1"/>                    </LinearGradientBrush>                </Setter.Value>            </Setter>            <Setter Property="Foreground" Value="White"/>            <Setter Property="Padding" Value="5 "/>        </Style>    </phoneNavigation:PhoneApplicationPage.Resources>    <Grid x:Name="LayoutRoot" Background="White">                <Grid.RowDefinitions>            <RowDefinition Height="Auto"/>            <RowDefinition Height="*"/>        </Grid.RowDefinitions>                       <controls:BackgroundControl Opacity=".3" />        <Border VerticalAlignment="Top" Grid.Row="0" Height="60"                  BorderBrush="#FFFFE63E" CornerRadius="10,10,10,10" 		BorderThickness="2,2,2,2" Margin="0,0,0,0">            <Border.Background>                <LinearGradientBrush EndPoint="0.5,-1.389" 		StartPoint="0.5,2.389" SpreadMethod="Pad">                    <GradientStop Color="#FFFF9900" Offset="1"/>                    <GradientStop Color="#FFFF9900" Offset="0.58"/>                    <GradientStop Color="#FFFFFFFF" Offset="0"/>                </LinearGradientBrush>            </Border.Background>            <Grid>                               <Rectangle Stroke="{x:Null}" Margin="5,3,5,18"                            RadiusX="10" RadiusY="10" Opacity="0.41">                    <Rectangle.Fill>                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">                            <GradientStop Color="#FFECECEC" Offset="0"/>                            <GradientStop Color="#FFFFFFFF" Offset="1"/>                        </LinearGradientBrush>                    </Rectangle.Fill>                </Rectangle>                <StackPanel Height="50" x:Name="stackPanel1" Margin="15,0,5,0"                             VerticalAlignment="Center" HorizontalAlignment="Stretch"                             Width="Auto"  Orientation="Horizontal">                    <TextBlock VerticalAlignment="Center" 			Foreground="White" Text="Code:" TextWrapping="Wrap"/>                                        <TextBox Text="{Binding Path=LevelCode, Mode=OneWay}"                             x:Name="textBox_LevelCode" MaxLength="5"                             Opacity="0.4" Width="110" TextAlignment="Center"                             VerticalAlignment="Center"                              HorizontalContentAlignment="Center"                              GotFocus="TextBox_LevelCode_GotFocus"                              LostFocus="TextBox_LevelCode_LostFocus"                              KeyUp="TextBox_LevelCode_KeyUp"                             Background="White" />                    <Button Style="{StaticResource ToolBarWebdings}" 			Margin="0,-10,0,0" Height="10" Content=""                            Click="Button_Undo_Click"/>                    <Button Style="{StaticResource ToolBarWebdings}" 			Margin="0,-10,0,0" Height="10" Content=""                            Click="Button_Redo_Click"/>                    <TextBlock Visibility="{Binding ElementName=Page, 			Path=PageOrientation,                             Converter={StaticResource OrientationToVisibilityConverter}, 			ConverterParameter=Landscape}"                        VerticalAlignment="Center" HorizontalAlignment="Center"                                TextAlignment="Center" Foreground="White" 				Text="Alien Sokoban"                                FontFamily="Tahoma" FontSize="36" Margin="45,0,0,0"/>                </StackPanel>                <Grid HorizontalAlignment="Right">                    <StackPanel Orientation="Horizontal">                        <StackPanel VerticalAlignment="Center">                            <StackPanel Orientation="Horizontal">                                <TextBlock Style="{StaticResource CenterLabels}" 				Text="Level "/>                                <TextBlock x:Name="label_LevelNumber"                                            Style="{StaticResource CenterLabels}"                                            Text="{Binding Path=Level.LevelNumber}"/>                                <TextBlock Style=				"{StaticResource CenterLabels}" Text="/"/>                                <TextBlock Style="{StaticResource CenterLabels}" 				Text="{Binding Path=LevelCount}"/>                            </StackPanel>                            <StackPanel Orientation="Horizontal">                                <TextBlock Style="{StaticResource CenterLabels}" 				Text="Moves "/>                                <TextBlock x:Name="label_Moves" 				Style="{StaticResource CenterLabels}"                                            Text="{Binding Path=Level.Actor.MoveCount}"/>                            </StackPanel>                        </StackPanel>                        <Button Style="{StaticResource ToolBarWebdings}" 				Margin="0,-8,0,0"                                 Height="10" x:Name="button_RestartLevel" Width="80"                                 Click="Button_RestartLevel_Click"                                 IsTabStop="False"  Content=""                                HorizontalAlignment="Right" >                            <ToolTipService.ToolTip>                                <ToolTip Content="Restart"></ToolTip>                            </ToolTipService.ToolTip>                        </Button>                    </StackPanel>                </Grid>            </Grid>        </Border>        <!-- The Game grid. -->        <Border Grid.Row="1" Padding="5" BorderBrush="#919292" CornerRadius="12"                 BorderThickness="0" Background="Transparent">            <Grid x:Name="grid_Game" />        </Border>        <Grid x:Name="textBlock_PressAnyKey"               Background="#006DCAC1"              HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.RowSpan="2">            <StackPanel VerticalAlignment="Center" HorizontalAlignment="Stretch"                         Background="#556DCAC1">                <TextBlock x:Name="feedbackControl"                            VerticalAlignment="Center"                           HorizontalAlignment="Center" Text="TextBlock" FontSize="32"/>                <Button Style="{StaticResource OrdinaryButton}" Content="Continue"                         VerticalAlignment="Center" HorizontalAlignment="Center"                        Click="Button_Continue_Click"/>                 </StackPanel>        </Grid>    </Grid>    </phoneNavigation:PhoneApplicationPage>
在MainPage的InitializeLevel方法中,每个网格用CellControl填充:
void InitialiseLevel(){	cellControls.Clear();	commandManager.Clear();	grid_Game.Children.Clear();	grid_Game.RowDefinitions.Clear();	grid_Game.ColumnDefinitions.Clear();	for (int i = 0; i < Game.Level.RowCount; i++)	{		grid_Game.RowDefinitions.Add(new RowDefinition());	}	for (int i = 0; i < Game.Level.ColumnCount; i++)	{		grid_Game.ColumnDefinitions.Add(new ColumnDefinition());	}	var cellSize = CalculateCellSize();		for (int row = 0; row < Game.Level.RowCount; row++)	{		for (int column = 0; column < Game.Level.ColumnCount; column++)		{			Cell cell = Game.Level[row, column];			cell.PropertyChanged += cell_PropertyChanged;			CellControl cellControl = new CellControl(cell);			cellControl.MaxHeight = cellControl.MaxWidth = cellSize;			cellControl.Click += Cell_Click;			Grid.SetColumn(cellControl, column);			Grid.SetRow(cellControl, row);			grid_Game.Children.Add(cellControl);			cellControls.Add(cellControl);		}	}	/* Play the intro audio clip. */	PlayAudioClip(introSoundEffect);	/* Listen for actor property changes. */	//Game.Level.Actor.PropertyChanged += Actor_PropertyChanged;	RefreshGameGrid();}
通常,我不会建议把这样的UI逻辑代码放在代码的旁边,因为我更喜欢使用MVVM方法。 然而权宜之计,我就用这个方法。
该CellControl被分配给一个游戏网格,显示效果由单元格的状态而定。 如果它被认为是一堵墙,它显示一个灰色正方形等。
Phone屏幕键盘
Windows Phone 7允许开发者在用户打开屏幕键盘时指定数据类型。这也是上下文敏感的,TextBox获得焦点时,TextBox将被放大。使用InputScope使键盘更适合于正在输入的数据。
例如,要指定一个默认的屏幕键盘,需应用InputScope到该TextBox 。
<TextBox>   <TextBox.InputScope>     <InputScope>       <InputScope.Names>         <InputScopeName NameValue="EmailNameOrAddress"/>       </InputScope.Names>     </InputScope>   </TextBox.InputScope> </TextBox>
通过使用EmailNameOrAddress NameValue,键盘包含了.com 和 @等字符。
以下是一些有效取值:
SIP 布局XAML 或枚举值SIP 描述
DefaultDefault, and other standard input scope values标准 QWERTY 键盘
TextText带特性的text,如自动更正和单词建议。
WebUrl URL
E-mail addressEmailSmtpAddress e-mail 地址
E-mail name or addressEmailNameOrAddress 电子邮件名称或地址
MapsMaps搜索在地图上的位置
Phone numberTelephoneNumber电话号码
SearchSearch搜索查询
SMS contactNameOrPhoneNumber短信
ChatChat文字输入,使用智能功能,如缩写

 

 

结论

 

在这篇文章中,我们已经看到了如何使用Silverlight 3创建一个Windows Phone益智游戏。 我们看到了PageOrientation和如何将其应用于控制布局。 我们根据上下文可以选择不同的键盘,我们还简要接触了XNA Framework的音频API,它可以用来播放声音效果。

 

这个平台的未来,我很兴奋。 花费了一个短暂的时间后,我已经有宾至如归的感觉。 我希望这个项目对你非常有用。 如果是的话,那么我会很感激,如果你能反馈一下,这会帮助我,使我的下一篇文章更好。

 

 

把服务器搬进来:Splashtop在中国搭建Bridging Cloud Web框架全对比第五期 新增Windows环境 前Tumblr首席开发者回忆录:一个人也能开发出好产品 测试者和开发者,为何我们不能友好地相处? 讲师秀之11:何刚谈京东的云机遇 讲师秀之10:武汉大学张焕国教授,可信计算是云计算之成败关键 【上海直播】Windows Azure+世纪互联:中国云计算“烈火烹油” 最新版Chrome浏览器推出全新语音搜索功能 惠普第二财季净利润同比下滑32% PC和服务器销售不佳 讲师秀之11:网易汪源的成长故事 PPT集萃(三):六位国内技术大牛分享巨型平台的打造与应用 聚焦全球移动市场:创新以色列 科技巨头的倾慕之地 Android版Chrome 27浏览器正式上架 机器人——数据中心的新“网管” George Chu:在雅虎打造真正的工程师文化 2013,303+家中国云计算企业的“生态系统”之梦! 高访问量Web应用跨云端迁移的原因:权限和易用性 Web应用开发者福音 Chrome 28新增丰富通知中心功能 帷千兰旭:推广渠道鱼龙混杂,开发者请小心 关于IE 10 你应该知道的6件事 Spring Framework 4.0M1发布,支持JDK 8、Java EE 7 “渣打科营编程马拉松赛”正式启动 官网同时上线 Android应该支持OpenCL的十大理由 传谷歌考虑和Facebook竞购众包地图Waze 谷歌工程师再次公布Windows漏洞 并称微软很难合作 Glassdoor评前景最令员工乐观的十大科技公司 华为上榜 下一代Android深度前瞻 第18级API功能揭秘 Web开发者不容错过的20段CSS代码 8大核心要点:我们能用HTML5 Canvas做什么? 移动周报:直接拿来用!最火的Android开源项目 前MySQL CEO:云将重新定义开发者的每一件事 关于vc调试,F11单步执行怎样才能跳过 cout<<等函数内部 这段代码什么地方有错? 沙锅之问一:各位老大,请谈谈在jsp中打印当前页面的问题,很想知道你们是怎么做的!!! 有人对php中处理xml熟悉吗? 两个异地的windows2000 server服务器,如何配置在一个组织下! 用ADO做SQL的操作出现的奇怪问题 帮忙解释一下scjp中的这道线程题…… 我的这段程序为什么不能出现图标呢?(有关树控件)急等! 请问哪里有maple下载 给100分 怎样才能更好的通过网络学习,不断的提高自己,大家各抒己见! google被封,上有政策,下有对策,想继续使用google的进来!!! 有kjava相关的资料或信息者请入 使用session问题 各位大侠,怎样在VB6中通过代码,控制SQLServer6中数据表的权限,如只读,可写,能删等。 谁知道哪有SCJP的英文原版教材下载呀? 为什么对话框的类都看不到析构函数! 请教一个SQL的问题 从局域网内拷贝文件,总是断线 问大家一个特别傻的问题,但是请务必帮我解答,谢谢了 问大家一个特别傻的问题,但是请务必帮我解答,谢谢了 treeView控件的问题 asp中的几个问题,急! 在类中用static const 定义常量的问题 谁安装oracle9i了? 哪里有文档编辑软件的源程序(带查找、替换),给url就给分? =最近做了一个免费小工具,想请大家帮忙测试并发表一些关于我的程序功能和界面布局的意见= 很急 [建议]关于提问 100分请教如何使用JS来实现定时执行alert()命令 请问怎样给DataGrid添加一个空行? 请问在用openssl生成csr时出现如下的问题,如何解决?急用 100感谢 =最近做了一个免费小工具,想请大家帮忙测试并发表一些关于我的程序功能和界面布局的意见= oracle 9i的问题,急救 24位的位图是不是没有颜色表? 一个简单的关于层的问题,谁能帮我解释一下呢? 请问在用openssl生成csr时出现如下的问题,如何解决?急用 100感谢 超菜问题? 现在网上有没有破解的MDaemon下载? 唉,和老妈吵架~散分~~ LyfUpload组件上传时能否添加下拉框,并把其值一起提交到数据库中?急!急!急! 请高手一览:为什么这段程序不能写进数据库?不好意思,分只有这么多了!呵呵 建立一个收费的网站的思路如何?请大家指教! 怎样改造Anythere 5.0的数据库? 有没有去过珠海的朋友? 我出100分重新讨论《100分求助:如何解决内存泄漏,代码如下》 有没有现成的软件,判断一个email的使用方的具体位置,到“市”一级? 用ADO能不能用SQL语句将Access2000库中的表复制到SQL2000server库中? maddam、Hankuu请进,重新给分。100分求助:如何解决内存泄漏,代码如下(无内容) javascript中如何控制<input type="image" id=id1 name=name1>的位置 如何用pb完成文件上传服务器的功能 有关ORACLE在ODBC内部的连接问题?? 移动电源不充满电能直接用吗? 由于细胞核作用,细胞能不断的与外界进行( )交换. 二氧化硅的结构和性质 移动电源充多久电能满 细胞质和细胞核之间进行着频繁的物质交换细胞质与细胞核之间进行着频繁的物质交换和信息交流,下列物质必须通过核孔才能进出细胞核的是①脱氧核苷酸 ②核糖核苷酸 ③RNA ④RNA合成酶 求考察二氧化硅性质的化学题不要太简单的,说明考察的知识点以及正确答案 哪个品牌的移动电源好一点?移动电源充满电能用多久? 入体摄入的营养物质用于()A构成细胞B交换废物C提供能量D构成细胞核提供能量 SiO2+Na2CO3的方程式表示二氧化硅的什么性质 移动电源充满一次电能用多久 热量是如何进行传递的?热量是通过碰撞的形式产生的,是通过什么形式吸收的? 确定正交平面参考系必须提出哪些假设?为什么? 她让王叔叔帮她修自行车She asks Uncle Wang to( )it for her. 一分钟过去了,地球上大约又增加了300个婴儿.全球平均每秒大约有多少个婴儿出生要等量关系式,解方程 十三.阅读短文,有一棵大树,它自命不凡、十三.阅读短文,14分 有一棵大树,它自命不凡,常常吹 嘘自己的本领.一天,它对大地说:“谁也没有我本领大.夏天的太阳多热呀,像个大火球,可我能用我 他因为会骑自行车,所以会修自行车 修改病句 解方程 一分钟过去了,地球上大约又增加了三百个婴儿.全球平均每秒大约有多少个婴儿出生? 一棵大树文章答案从前有一棵树,她很爱一个男孩.每天,男孩都会到树下来,把树的落叶拾起来,做成一个树冠,装成森林之王.有时候,他爬上树去,抓住树枝荡秋千,或者吃树上结的果子.有时,他们 谁帮我解释一下麦克斯韦方程组的意义及实际应用 一分钟过去了,地球上大约又增加了300个婴儿.全球平均每秒大约有多少个婴儿出生?要验算,明确一点. 二氧化硅是人类将太阳能转化为电能的常用材料对吗? 如何借助作用量原理推导麦克斯韦方程组? 一分钟过去了,地球上大约又增加了300个婴儿.全球平均每秒大约有多少个婴儿出生?怎样写关系式 如何区分顺反异构,以环己烷及其衍生物为例 通俗易懂点哟.别百度上复制+粘贴. 研究日常生活中哪些现象及其物品与岩石有关?并记录下来! 成都理工的地球物理学真的好就业吗? 红外光谱是如何区分顺反异构,和取代基类型? 岩石的用处有哪些?列:腌菜是,把它压在上面. 英语翻译转录我知道啊 但是为什么翻译也是呢 不是在核糖体上进行的吗?那应该在细胞质啊 刀具的正交平面、基面、切削平面定义是什么? 欧迪克太阳能和皇明老款差别 谁能详细的解释一下转录翻译什么的.细胞核什么的. 顺反异构的取代基一定相同吗 欧迪克太阳能好吗?买皇明的好还是欧迪克的好? 细胞核的什么结构使基因在转录和翻译两个过程在时空上分开 、在正交平面中测量的角度有()、()、(),在基面中测量的角度有()、()、() . 将15.8g高锰酸钾放入试管中加热制取氧气加热到不再产生气体为止(1)反应后剩余固体的物质的质量____原高锰酸钾的质量(填大于、小于、等于) 推断的依据是_________(2)剩余固体物质中含 地球内部可以分成那三部分? 刀具正交平面坐标系的三个组成平面是什么 读悼念玛丽居里的读后感,拜托要自己现写的 假如地球的体积和质量均少1/2,那么与现在相比,地球的环境可能会发生哪些变化 数控刀具中正交平面参考系基面有个不明白的地方1:普通车床和数控车床M03主运动的方向分别是哪个方向?它们不是旋转的吗,怎么分辨主运动哪个方向? 写一篇关于悼念玛丽居里的读后感,要自己现写的, 全球的气温升高,主要是因为排放到空中的( )等温室气体增加造成的 基面,切削平面和正交平面有什么关系 实验室常用分解高锰酸钾制取氧气,同时还能得到一种常见的催化剂,问在制得4.8G的氧 车刀的角度符号是什么字母如何打出来 岩石和矿物被开采后为什么不能再生? 两个不锈钢碗由于大气压力卡在一起了应该怎么拿出来? 做好了一个平面标志,想用3D做个立体标志做效果,哪里有这类的教程啊 岩石和矿物是怎样开采出来的? NPT3/4和3/4-16UNF-2B有什么不同 一分钟过去了,地球上大约有增加了300个婴儿.全球平均每秒大约有多少个婴儿出生?要数量关系 要数量关系 人类不停的开采岩石和矿物,我们的生活将会产生什么样的影响? 中国石油大学的地质学怎么样,我是说地质学,不是地质工程华东的 一分钟过去了地球上大约又增加了300个婴儿全球平均每秒大约有多少噶婴儿出生.方程等量关系 岩石和矿物被开采后,就不能( ),因此我们要很好地( )、( )地利用岩石和矿物. 岩石的用处 二氧化硅有哪些物理性质 歼十出击观后感600
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘