上一个游戏已经告诉大家如何写多个游戏,现在继续写这个无聊的游戏
希望大家在看这篇文章之前先看 win10 uwp 商业游戏,在这个文章告诉了大家如何创建游戏。
修改数值
可以从上一篇的博客的游戏看到升级太简单,所以需要在点击升级点击的时候,下次升级需要的添加
写法很简单,请看下面
public class HisjfnnzSqsbtuuqq : DexqurhctSjyfozae,IKdgvtziaSfs { public HisjfnnzSqsbtuuqq(IDfeppzyTmofs dfeppzy) { Dfeppzy = dfeppzy; HnukhltvKfdrpokjz = "点击添加修为"; DmyikbmfDeb = 10; DklvubnuiTeqch = 1; } public IDfeppzyTmofs Dfeppzy { get; } public override void DqqTsb() { DmyikbmfDeb *= 1.5; DklvubnuiTeqch += 1; } public void DdwTynktxyx() { Dfeppzy.KtrKvmvvnj += (long)Math.Floor(DklvubnuiTeqch); } }
但是可以看到界面显示的小数点,需要只显示两位,可以使用转换,请看下面
public class DyakmdgwuTlaukxbo:IValueConverter { public object Convert(object value,Type targetType,object parameter,CultureInfo culture) { if (value is double kbjjDzn) { return kbjjDzn.ToString("F"); } return ""; } public object ConvertBack(object value,CultureInfo culture) { throw new NotImplementedException(); } }
<local:DyakmdgwuTlaukxbo x:Key="DyakmdgwuTlaukxbo"></local:DyakmdgwuTlaukxbo> <ListView ItemsSource="{Binding DexqurhctSjyfozae}" HorizontalAlignment="Stretch" BorderBrush="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListViewItem}"> <Border x:Name="Bd" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </ListView.ItemContainerStyle> <ListView.ItemTemplate> <DataTemplate DataType="tpwlxnpDfyecpeoh:DexqurhctSjyfozae"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="5*"></ColumnDefinition> <ColumnDefinition Width="1*"></ColumnDefinition> <ColumnDefinition Width="1*"></ColumnDefinition> <ColumnDefinition Width="1*"></ColumnDefinition> <ColumnDefinition Width="1*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid> <TextBlock Style="{StaticResource HztDmaer}" Text="{Binding HnukhltvKfdrpokjz}"></TextBlock> </Grid> <Grid Grid.Column="1"> <StackPanel Orientation="Horizontal"> <TextBlock Style="{StaticResource HztDmaer}" Text="当前的值"></TextBlock> <TextBlock Style="{StaticResource HztDmaer}" Text="{Binding DklvubnuiTeqch,Converter={StaticResource DyakmdgwuTlaukxbo}}"></TextBlock> </StackPanel> </Grid> <Grid Grid.Column="2"> <StackPanel Orientation="Horizontal"> <TextBlock Style="{StaticResource HztDmaer}" Text="升级需要修为"></TextBlock> <TextBlock Style="{StaticResource HztDmaer}" Text="{Binding DmyikbmfDeb,Converter={StaticResource DyakmdgwuTlaukxbo}}"></TextBlock> </StackPanel> </Grid> <Grid Grid.Column="3"> <RepeatButton Margin="10,10,10" Content="升级" Click="HzmzKgeu_OnClick"></RepeatButton> </Grid> <Grid Grid.Column="4"> <Button Margin="10,10" Content="点击" Click="DlsuqHmopxh_OnClick"></Button> </Grid> </Grid> </DataTemplate> </ListView.ItemTemplate> </ListView>
点击添加技能
现在有了值,可以添加一个新的技能,这个技能就是点击添加新的技能。
添加技能这个技能是不需要升级的,所以存在一个值告诉界面,当前这个技能是不需要升级的,而且没有当前值,所以这个类不能继承 DexqurhctSjyfozae 。但是可以从另一个方面去做,本来添加技能就是升级,所以当前的值就是升级的值。所以这个类只需要继承技能基类。
创建一个类 KdlunmmHhrs ,这个类是添加技能
class KdlunmmHhrs : DexqurhctSjyfozae { public override void DqqTsb() { } }
点击升级的时候就添加新的技能,所以需要一个技能工厂类,这个类用来创建技能
所以创建一个类 TeddtHlhkgt 是工厂类,创建各种技能,因为技能很多,所以需要具体技能的工厂类,这个基类是 SbjHoeb ,通过这个类就可以创建技能,所以可以看到这个类的代码可以这样写
class TeddtHlhkgt { public TeddtHlhkgt(IDfeppzyTmofs smktuoiznSobrf) { SmktuoiznSobrf = smktuoiznSobrf; } public List<SbjHoeb> DpwHoulmqbx { set; get; } = new List<SbjHoeb>(); public IDfeppzyTmofs SmktuoiznSobrf { get; } public DexqurhctSjyfozae StdshakHngld() { return DpwHoulmqbx[ran.Next(DpwHoulmqbx.Count)].StdshakHngld(SmktuoiznSobrf); } private static Random ran = new Random(); }
internal abstract class SbjHoeb { public abstract DexqurhctSjyfozae StdshakHngld(IDfeppzyTmofs donufyqgfKfnazhrcg); }
因为很多类都需要传入 IDfeppzyTmofs 人物类,所以就需要在函数添加参数,在使用的时候输入。
然后创建添加修为的工厂类 SdmqokThd 这个类返回技能
class SdmqokThd : SbjHoeb { public override DexqurhctSjyfozae StdshakHngld(IDfeppzyTmofs donufyqgfKfnazhrcg) { return new HisjfnnzSqsbtuuqq(donufyqgfKfnazhrcg); } }
但是现在的添加技能类还没有添加技能,因为技能的属性在他的上面,他拿不到,所以只能使用构造函数传入
internal class KdlunmmHhrs : DexqurhctSjyfozae { public KdlunmmHhrs(ObservableCollection<DexqurhctSjyfozae> dexqurhctSjyfozae,IDfeppzyTmofs tdheituHnks) { DexqurhctSjyfozae = dexqurhctSjyfozae; TdheituHnks = tdheituHnks; HnukhltvKfdrpokjz = "点击添加技能"; DfacHbl = new TeddtHlhkgt(tdheituHnks); DmyikbmfDeb = 100; } public override void DqqTsb() { DklvubnuiTeqch = DklvubnuiTeqch + 1; DexqurhctSjyfozae.Add(DfacHbl.StdshakHngld()); } private ObservableCollection<DexqurhctSjyfozae> DexqurhctSjyfozae { get; } private IDfeppzyTmofs TdheituHnks { get; } private TeddtHlhkgt DfacHbl { get; } }
可以看到,技能类都需要在构造添加 DmyikbmfDeb 升级需要的修为,在点击升级 DqqTsb 添加当前值 DklvubnuiTeqch ,但是这个值不是每次都添加1。先添加这个技能来看一下
打开 HnlcDbtdhsdjModel ,在跳转时,创建 KdlunmmHhrs ,然后添加到技能
public override void OnNavigatedTo(object sender,object obj) { KppnuhKxkpxdee = new TdsumTzwok(); var hisjfnnzSqsbtuuqq = new HisjfnnzSqsbtuuqq(KppnuhKxkpxdee); DexqurhctSjyfozae = new ObservableCollection<DexqurhctSjyfozae>() { hisjfnnzSqsbtuuqq,}; var kdlunmmHhrs = new KdlunmmHhrs(DexqurhctSjyfozae,KppnuhKxkpxdee); DexqurhctSjyfozae.Add(kdlunmmHhrs); }
现在可以看到,添加技能这个存在点击按钮,但是不需要点击,只有升级。所以如何修改?下面来告诉大家使用列表模板
实际在win10 uwp 列表模板选择器已经有告诉大家如何写了,所以这里只是很简单告诉大家,这里的代码需要如何写