C# WPF新手入门之连连看关卡版3关.docx

上传人:b****8 文档编号:10196963 上传时间:2023-02-09 格式:DOCX 页数:24 大小:1.13MB
下载 相关 举报
C# WPF新手入门之连连看关卡版3关.docx_第1页
第1页 / 共24页
C# WPF新手入门之连连看关卡版3关.docx_第2页
第2页 / 共24页
C# WPF新手入门之连连看关卡版3关.docx_第3页
第3页 / 共24页
C# WPF新手入门之连连看关卡版3关.docx_第4页
第4页 / 共24页
C# WPF新手入门之连连看关卡版3关.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

C# WPF新手入门之连连看关卡版3关.docx

《C# WPF新手入门之连连看关卡版3关.docx》由会员分享,可在线阅读,更多相关《C# WPF新手入门之连连看关卡版3关.docx(24页珍藏版)》请在冰豆网上搜索。

C# WPF新手入门之连连看关卡版3关.docx

C#WPF新手入门之连连看关卡版3关

C#WPF新手入门之连连看关卡版(3关)

之前做了个连连看简单版,只一关,可参见我的文库相关文档,这次增加了关卡,总共三关,并且可以选择关卡,播放不同背景音乐,歌名滚动显示。

效果如下:

 

第一关,8*8网格,共8种图片,每种图片出现8次,时间5分钟,背景音乐选择1

 

 

第二关,10*10网格,共10种图片,每种图片出现10次时间3分钟,背景音乐选择2

 

 

第三关,12*12网格,共12种图片,每种图片出现12次时间2.5分钟,背景音乐选择3

 

 

1.界面设计

2.

3.

共2个Grid,Grid1用于生产图片;Grid0上有三个label,显示时间,关卡和歌曲名;2个Menu,展开如左所示;由于歌曲名需要滚动显示,此处label3是放在canvas上的

Xaml代码如下:

Class="连连看.MainWindow"

xmlns="

xmlns:

x="

xmlns:

d="

xmlns:

mc="http:

//schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:

local="clr-namespace:

连连看"

mc:

Ignorable="d"

Title="连连看V2.0"Height="624"Width="624"Background="#FFF1A8A8"Loaded="Window_Load"WindowStartupLocation="CenterScreen"ResizeMode="CanMinimize"Visibility="Visible"BorderBrush="#FF61B917"Icon="Image/1.JPG">

Name="Label1"Content="00:

00"HorizontalAlignment="Center"VerticalAlignment="Top"FontSize="16"RenderTransformOrigin="8.573,4.41"/>

Name="Start_Btn"Header="开始游戏"Click="StartBtn_Click"/>

Name="End_Btn"Header="结束游戏"Click="EndBtn_Click"/>

Name="About_Btn"Header="关于"Background="#FFD1D4C5"BorderBrush="#FF65E69A"Margin="2,0,0,0"Click="AboutBtn_Click"/>

Name="SelMenu"Grid.Row="0"HorizontalAlignment="Right"Height="29"Width="60"VerticalAlignment="Center">

Name="SelLevel"Header="关卡选择"VerticalAlignment="Center"Height="29"BorderBrush="#FFC5412C"Background="#FFAFD698">

Name="LevelOne"Header="第一关"Click="Level1_Click"/>

Name="LevelTwo"Header="第二关"Click="Level2_Click"/>

Name="LevelThird"Header="第三关"Click="Level3_Click"/>

Name="Label2"Content=""RenderTransformOrigin="8.573,4.41"Margin="167,0,393,0"Width="58"VerticalAlignment="Center"Height="25"/>

Name="Label3"Content=""Width="84"FlowDirection="RightToLeft"HorizontalAlignment="Left"Canvas.Left="5"Background="{x:

Null}"ScrollViewer.HorizontalScrollBarVisibility="Auto"/>

4.程序设计

首先,在项目路径下需要一些图片:

 

3关,共3组图片

 

背景音乐,需要WAV格式:

3关,共种背景音乐

 

较之前简单版,这里增加了歌曲名的循环移动,此处用了简单的方法,原理是在Canvas上加了一个label,然后改变label位置和宽度,当label向左移动的时候宽度也随着减小,看上去label就像在慢慢消失,全部消失后再回到原始位置以此循环。

如下定义4个变量:

LabelPos=Canvas.GetLeft(Label3);//获取歌曲名当前X轴位置

LabelPos_Orignal=LabelPos;//原始位置

LableWidth=Label3.Width;//获取歌曲名当前宽度

LabelWidth_Orignal=LableWidth;//原始宽度

主循环中执行:

/****歌曲名当前宽度和位置设定****/

Canvas.SetLeft(Label3,LabelPos);

LabelPos=Canvas.GetLeft(Label3);

Label3.Width=LableWidth;

LableWidth=Label3.Width;

/****歌曲名宽度和位置变化****/

LabelPos=LabelPos-10;

LableWidth=LableWidth-20;

 

if(LabelPos<-40)//全部左移出区域后回到原始位置

{

Dispatcher.Invoke(newAction(()=>

{

LabelPos=LabelPos_Orignal;

LableWidth=LabelWidth_Orignal;

}));

}

 

以下为完整源代码:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Windows;

usingSystem.Windows.Controls;

usingSystem.Windows.Data;

usingSystem.Windows.Documents;

usingSystem.Windows.Input;

usingSystem.Windows.Media;

usingSystem.Windows.Media.Imaging;

usingSystem.Windows.Navigation;

usingSystem.Windows.Shapes;

usingSystem.Threading;

usingSystem.Media;

namespace连连看

{

publicpartialclassMainWindow:

Window

{

privateintcount=0;//图片点击次数

privateImageSelBeforeImg;//选中之前图片

privateintGameFlag=1;//游戏开始标志

privateintLeftTime=0;//剩余时间

privateintLeftMin;//剩余时间分钟

privateintLeftSec;//剩余时间秒

privateintImageNo=0;//图片名数量

privateintClearImg=0;//消除的图片

privateintEndSelect;//游戏结束选择失败=0/成功=1/手动结束=2/下一关=3

privateintLevel=1;//关卡数,默认第一关

privateintCGridNo=10;//生成网格数量

privateintCImageNo=10;//生成图片数量

privatedoubleLableWidth;//歌曲名宽度

privatedoubleLabelWidth_Orignal;//歌曲名原始宽度

privatedoubleLabelPos;//歌曲名位置X轴

privatedoubleLabelPos_Orignal;//歌曲名原始位置X轴

Threadthread;

Imageimage;

SoundPlayersoundPlayer;

 

publicMainWindow()

{

InitializeComponent();

}

privatevoidWindow_Load(objectsender,RoutedEventArgse)//界面初始化设置

{

LeftMin=LeftTime/60;

LeftSec=LeftTime%60;

Label1.Content=LeftMin.ToString().PadLeft(2,'0')+":

"+LeftSec.ToString().PadLeft(2,'0');//剩余时间显示

End_Btn.IsEnabled=false;

SelMenu.Visibility=Visibility.Hidden;

LabelPos=Canvas.GetLeft(Label3);//获取歌曲名当前X轴位置

LabelPos_Orignal=LabelPos;//原始位置

LableWidth=Label3.Width;//获取歌曲名当前宽度

LabelWidth_Orignal=LableWidth;//原始宽度

this.KeyDown+=MainWindow_KeyDown;//按键事件

}

privatevoidMainWindow_KeyDown(objectsender,KeyEventArgse)//关卡选择开启

{

if((Keyboard.Modifiers&ModifierKeys.Control)==ModifierKeys.Control&&e.Key==Key.F1)

{

if(!

SelMenu.IsVisible)

{

SelMenu.Visibility=Visibility.Visible;

}

else

{

SelMenu.Visibility=Visibility.Hidden;

}

}

}

 

privatevoidStartBtn_Click(objectsender,RoutedEventArgse)//点击按键开始游戏

{

Start_Game();

}

privatevoidStart_Game()

{

Start_Btn.IsEnabled=false;

End_Btn.IsEnabled=true;

switch(Level)

{

case1:

CGridNo=8;CImageNo=8;break;//第一关,8*8网格,8种图片

case2:

CGridNo=10;CImageNo=10;break;//第二关,10*10网格,10种图片

case3:

CGridNo=12;CImageNo=12;break;//第三关,12*12网格,12种图片

default:

break;

}

Creat_Grid(CGridNo);//生成网格

Create_Image(CImageNo);//加载图片

Game_Init();//加载初始设置

soundPlayer.Load();//加载背景音乐

soundPlayer.PlayLooping();//循环播放

thread.Start();//线程开始

}

privatevoidEndBtn_Click(objectsender,RoutedEventArgse)//点击按键结束游戏

{

EndSelect=2;

GameEnd();

}

privatevoidTimeStart()//剩余时间开始计时

{

while(GameFlag==1)

{

LeftMin=LeftTime/60;

LeftSec=LeftTime%60;

Dispatcher.Invoke(newAction(()=>{

Label1.Content=LeftMin.ToString().PadLeft(2,'0')+":

"+LeftSec.ToString().PadLeft(2,'0');//剩余时间显示

Canvas.SetLeft(Label3,LabelPos);//歌曲名左移

LabelPos=Canvas.GetLeft(Label3);

Label3.Width=LableWidth;

LableWidth=Label3.Width;

}));

LeftTime--;

LabelPos=LabelPos-10;

LableWidth=LableWidth-20;

if(LabelPos<-40)//全部左移出区域后回到原始位置

{

Dispatcher.Invoke(newAction(()=>

{

LabelPos=LabelPos_Orignal;

LableWidth=LabelWidth_Orignal;

}));

}

Thread.Sleep(1000);

if(LeftTime<0)//时间到0,游戏结束

{

EndSelect=0;

GameEnd();

}

}

}

privatevoidImage_MouseDown(objectsender,MouseButtonEventArgse)//点击图片触发事件

{

if(GameFlag==1)

{

if(count==0)

{

count++;

SelBeforeImg=((Image)sender);

}

else

{

count=0;

stringSelNowImg=((Image)sender).Name;

if(SelBeforeImg.Name==SelNowImg&&SelBeforeImg!

=(Image)sender)//成功消除

{

((Image)sender).Visibility=Visibility.Collapsed;

SelBeforeImg.Visibility=Visibility.Collapsed;

ClearImg++;

switch(Level)//共3关,胜利后自动进入下一关

{

case1:

if(ClearImg==32)

{

EndSelect=3;

Level++;

ClearImg=0;

GameEnd();

Thread.Sleep(500);

Start_Game();

}

break;

case2:

if(ClearImg==50)

{

EndSelect=3;

Level++;

ClearImg=0;

GameEnd();

Thread.Sleep(500);

Start_Game();

}

break;

case3:

if(ClearImg==72)

{

EndSelect=1;

ClearImg=0;

GameEnd();

}

break;

default:

break;

}

if(Level==3)

{

Level=1;

}

}

else

{

SystemSounds.Hand.Play();//消除不成功提示音

}

}

}

}

privatevoidGameEnd()//游戏结束

{

for(inti=0;i

{

Dispatcher.Invoke(newAction(()=>{

Imageimage1=image.FindName("Cimage"+i.ToString())asImage;

GridName.Children.Remove(image1);

GridName.UnregisterName("Cimage"+i.ToString());

}));

}

for(inti=0;i

{

Dispatcher.Invoke(newAction(()=>{

GridName.ColumnDefinitions.Clear();

GridName.RowDefinitions.Clear();

}));

}

soundPlayer.Stop();//音乐停止

GameFlag=0;//游戏标志位复位

ClearImg=0;//图片清除标志位复位

Dispatcher.Invoke(newAction(()=>{

Start_Btn.IsEnabled=true;

End_Btn.IsEnabled=false;

}));

switch(EndSelect)//提示信息选择

{

case0:

{MessageBox.Show("时间到,游戏结束!

","游戏失败");};break;

case1:

{MessageBox.Show("恭喜,完成所有关卡!

","游戏胜利");};break;

case2:

{MessageBox.Show("游戏结束!

","游戏结束");};break;

case3:

{MessageBox.Show("恭喜进入下一关!

","游戏胜利");};break;

default:

break;

}

thread.Abort();//线程结束

}

privatevoidCreat_Grid(intgridNo)//生成网格

{

for(inti=0;i

{

ColumnDefinitioncolumn=newColumnDefinition();

GridName.ColumnDefinitions.Add(column);

RowDefinitionrow=newRowDefinition();

GridName.RowDefinitions.Add(row);

}

}

privatevoidCreate_Image(intimageNO)//加载图片

{

int[,]arr1=newint[imageNO,imageNO];

Randomrandom=newRandom();

intSelImgSerial=1;

switch(Level)

{

case1:

SelImgSerial=11;break;//第一关,图片编号11~18

case2:

SelImgSerial=1;break;//第二关,图片编号1~10

case3:

SelImgSerial=21;break;//第三关,图片编号21~32

default:

break;

}

for(inti=SelImgSerial;i

把数组arr1[0,0]~arr1[9,9]填满随机的1~10数字,并且每个数字出现10次

{

intImageCount=0;

while(ImageCount

{

intx

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1