Updated visual assets
Extended range of possible symbols to display
Двоичные данные
Games/Memory/Assets/LargeTile.scale-100.png
До Ширина: | Высота: | Размер: 8.6 KiB После Ширина: | Высота: | Размер: 46 KiB |
Двоичные данные
Games/Memory/Assets/LargeTile.scale-125.png
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 68 KiB |
Двоичные данные
Games/Memory/Assets/LargeTile.scale-150.png
До Ширина: | Высота: | Размер: 15 KiB После Ширина: | Высота: | Размер: 88 KiB |
Двоичные данные
Games/Memory/Assets/LargeTile.scale-200.png
До Ширина: | Высота: | Размер: 23 KiB После Ширина: | Высота: | Размер: 141 KiB |
Двоичные данные
Games/Memory/Assets/LargeTile.scale-400.png
До Ширина: | Высота: | Размер: 65 KiB После Ширина: | Высота: | Размер: 84 KiB |
Двоичные данные
Games/Memory/Assets/SmallTile.scale-100.png
До Ширина: | Высота: | Размер: 1.7 KiB После Ширина: | Высота: | Размер: 4.3 KiB |
Двоичные данные
Games/Memory/Assets/SmallTile.scale-125.png
До Ширина: | Высота: | Размер: 2.1 KiB После Ширина: | Высота: | Размер: 6.1 KiB |
Двоичные данные
Games/Memory/Assets/SmallTile.scale-150.png
До Ширина: | Высота: | Размер: 2.7 KiB После Ширина: | Высота: | Размер: 9.6 KiB |
Двоичные данные
Games/Memory/Assets/SmallTile.scale-200.png
До Ширина: | Высота: | Размер: 3.6 KiB После Ширина: | Высота: | Размер: 14 KiB |
Двоичные данные
Games/Memory/Assets/SmallTile.scale-400.png
До Ширина: | Высота: | Размер: 7.7 KiB После Ширина: | Высота: | Размер: 42 KiB |
Двоичные данные
Games/Memory/Assets/SplashScreen.scale-100.png
До Ширина: | Высота: | Размер: 9.1 KiB После Ширина: | Высота: | Размер: 26 KiB |
Двоичные данные
Games/Memory/Assets/SplashScreen.scale-125.png
До Ширина: | Высота: | Размер: 12 KiB После Ширина: | Высота: | Размер: 36 KiB |
Двоичные данные
Games/Memory/Assets/SplashScreen.scale-150.png
До Ширина: | Высота: | Размер: 16 KiB После Ширина: | Высота: | Размер: 48 KiB |
Двоичные данные
Games/Memory/Assets/SplashScreen.scale-200.png
До Ширина: | Высота: | Размер: 25 KiB После Ширина: | Высота: | Размер: 73 KiB |
Двоичные данные
Games/Memory/Assets/SplashScreen.scale-400.png
До Ширина: | Высота: | Размер: 69 KiB После Ширина: | Высота: | Размер: 217 KiB |
Двоичные данные
Games/Memory/Assets/Square150x150Logo.scale-100.png
До Ширина: | Высота: | Размер: 3.8 KiB После Ширина: | Высота: | Размер: 16 KiB |
Двоичные данные
Games/Memory/Assets/Square150x150Logo.scale-125.png
До Ширина: | Высота: | Размер: 4.8 KiB После Ширина: | Высота: | Размер: 23 KiB |
Двоичные данные
Games/Memory/Assets/Square150x150Logo.scale-150.png
До Ширина: | Высота: | Размер: 5.9 KiB После Ширина: | Высота: | Размер: 29 KiB |
Двоичные данные
Games/Memory/Assets/Square150x150Logo.scale-200.png
До Ширина: | Высота: | Размер: 8.3 KiB После Ширина: | Высота: | Размер: 45 KiB |
Двоичные данные
Games/Memory/Assets/Square150x150Logo.scale-400.png
До Ширина: | Высота: | Размер: 22 KiB После Ширина: | Высота: | Размер: 137 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.scale-100.png
До Ширина: | Высота: | Размер: 972 B После Ширина: | Высота: | Размер: 2.3 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.scale-125.png
До Ширина: | Высота: | Размер: 1.2 KiB После Ширина: | Высота: | Размер: 3.2 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.scale-150.png
До Ширина: | Высота: | Размер: 1.5 KiB После Ширина: | Высота: | Размер: 4.0 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.scale-200.png
До Ширина: | Высота: | Размер: 2.1 KiB После Ширина: | Высота: | Размер: 6.0 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.scale-400.png
До Ширина: | Высота: | Размер: 4.5 KiB После Ширина: | Высота: | Размер: 20 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.targetsize-16.png
До Ширина: | Высота: | Размер: 379 B После Ширина: | Высота: | Размер: 700 B |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.targetsize-24.png
До Ширина: | Высота: | Размер: 507 B После Ширина: | Высота: | Размер: 1.1 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.targetsize-256.png
До Ширина: | Высота: | Размер: 6.8 KiB После Ширина: | Высота: | Размер: 35 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.targetsize-32.png
До Ширина: | Высота: | Размер: 630 B После Ширина: | Высота: | Размер: 1.5 KiB |
Двоичные данные
Games/Memory/Assets/Square44x44Logo.targetsize-48.png
До Ширина: | Высота: | Размер: 1.0 KiB После Ширина: | Высота: | Размер: 2.6 KiB |
Двоичные данные
Games/Memory/Assets/StoreLogo.scale-100.png
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 2.8 KiB |
Двоичные данные
Games/Memory/Assets/StoreLogo.scale-125.png
До Ширина: | Высота: | Размер: 1.4 KiB После Ширина: | Высота: | Размер: 3.8 KiB |
Двоичные данные
Games/Memory/Assets/StoreLogo.scale-150.png
До Ширина: | Высота: | Размер: 1.8 KiB После Ширина: | Высота: | Размер: 4.8 KiB |
Двоичные данные
Games/Memory/Assets/StoreLogo.scale-200.png
До Ширина: | Высота: | Размер: 2.5 KiB После Ширина: | Высота: | Размер: 8.7 KiB |
Двоичные данные
Games/Memory/Assets/StoreLogo.scale-400.png
До Ширина: | Высота: | Размер: 5.1 KiB После Ширина: | Высота: | Размер: 25 KiB |
Двоичные данные
Games/Memory/Assets/Wide310x150Logo.scale-100.png
До Ширина: | Высота: | Размер: 4.1 KiB После Ширина: | Высота: | Размер: 33 KiB |
Двоичные данные
Games/Memory/Assets/Wide310x150Logo.scale-125.png
До Ширина: | Высота: | Размер: 5.2 KiB После Ширина: | Высота: | Размер: 49 KiB |
Двоичные данные
Games/Memory/Assets/Wide310x150Logo.scale-150.png
До Ширина: | Высота: | Размер: 6.3 KiB После Ширина: | Высота: | Размер: 66 KiB |
Двоичные данные
Games/Memory/Assets/Wide310x150Logo.scale-200.png
До Ширина: | Высота: | Размер: 9.1 KiB После Ширина: | Высота: | Размер: 105 KiB |
Двоичные данные
Games/Memory/Assets/Wide310x150Logo.scale-400.png
До Ширина: | Высота: | Размер: 25 KiB После Ширина: | Высота: | Размер: 195 KiB |
|
@ -24,7 +24,7 @@ namespace Memory
|
|||
public sealed partial class GamePage : Page
|
||||
{
|
||||
const byte MIN_CHAR = 0x21;
|
||||
const byte MAX_CHAR = 0xE8;
|
||||
const byte MAX_CHAR = 0xff;
|
||||
|
||||
Random _rnd;
|
||||
Button _firstButton;
|
||||
|
@ -246,6 +246,67 @@ namespace Memory
|
|||
_reverseAnimationActive = false;
|
||||
}
|
||||
|
||||
private async void FlipCardFaceUp(Button btn)
|
||||
{
|
||||
//Flip button visual
|
||||
var btnVisual = ElementCompositionPreview.GetElementVisual(btn);
|
||||
var compositor = btnVisual.Compositor;
|
||||
|
||||
//Get a visual for the content
|
||||
var btnContent = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(btn, 0), 0);
|
||||
var btnContentVisual = ElementCompositionPreview.GetElementVisual(btnContent as FrameworkElement);
|
||||
|
||||
var easing = compositor.CreateLinearEasingFunction();
|
||||
|
||||
if (_flipBatchAnimation != null)
|
||||
{
|
||||
_flipBatchAnimation.Completed -= FlipBatchAnimation_Completed;
|
||||
_flipBatchAnimation.Dispose();
|
||||
}
|
||||
|
||||
_flipBatchAnimation = compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
|
||||
_flipBatchAnimation.Completed += FlipBatchAnimation_Completed;
|
||||
|
||||
ScalarKeyFrameAnimation flipAnimation = compositor.CreateScalarKeyFrameAnimation();
|
||||
flipAnimation.InsertKeyFrame(0.000001f, 180);
|
||||
flipAnimation.InsertKeyFrame(1f, 0, easing);
|
||||
flipAnimation.Duration = TimeSpan.FromMilliseconds(800);
|
||||
flipAnimation.IterationBehavior = AnimationIterationBehavior.Count;
|
||||
flipAnimation.IterationCount = 1;
|
||||
btnVisual.CenterPoint = new Vector3((float)(0.5 * btn.ActualWidth), (float)(0.5f * btn.ActualHeight), 0f);
|
||||
btnVisual.RotationAxis = new Vector3(0.0f, 1f, 0f);
|
||||
|
||||
ScalarKeyFrameAnimation appearAnimation = compositor.CreateScalarKeyFrameAnimation();
|
||||
appearAnimation.InsertKeyFrame(0.0f, 0);
|
||||
appearAnimation.InsertKeyFrame(0.599999f, 0);
|
||||
appearAnimation.InsertKeyFrame(0.6f, 0.5f);
|
||||
appearAnimation.InsertKeyFrame(1f, 1);
|
||||
appearAnimation.Duration = TimeSpan.FromMilliseconds(800);
|
||||
appearAnimation.IterationBehavior = AnimationIterationBehavior.Count;
|
||||
appearAnimation.IterationCount = 1;
|
||||
|
||||
btnVisual.StartAnimation(nameof(btnVisual.RotationAngleInDegrees), flipAnimation);
|
||||
btnContentVisual.StartAnimation(nameof(btnContentVisual.Opacity), appearAnimation);
|
||||
_flipBatchAnimation.End();
|
||||
|
||||
if (_usePictures)
|
||||
{
|
||||
var file = await StorageFile.GetFileFromPathAsync(btn.Tag.ToString());
|
||||
using (var stream = await file.OpenAsync(FileAccessMode.Read))
|
||||
{
|
||||
var image = new Image();
|
||||
var bmp = new BitmapImage();
|
||||
await bmp.SetSourceAsync(stream);
|
||||
image.Source = bmp;
|
||||
btn.Content = image;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
btn.Content = btn.Tag.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void FlipCardFaceDown(Button card)
|
||||
{
|
||||
if (card.Content == null) return;
|
||||
|
@ -449,7 +510,16 @@ namespace Memory
|
|||
}
|
||||
}
|
||||
|
||||
private async void OnButtonClick(object sender, RoutedEventArgs e)
|
||||
private void RevealBoard() //For debuging purposes
|
||||
{
|
||||
List<Button> listButtons = GetButtonList();
|
||||
foreach (Button button in listButtons)
|
||||
{
|
||||
FlipCardFaceUp(button);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnButtonClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_animationActive || _reverseAnimationActive) return;
|
||||
|
||||
|
@ -483,63 +553,8 @@ namespace Memory
|
|||
_secondButton = btn;
|
||||
}
|
||||
|
||||
//Flip button visual
|
||||
var btnVisual = ElementCompositionPreview.GetElementVisual(btn);
|
||||
var compositor = btnVisual.Compositor;
|
||||
FlipCardFaceUp(btn);
|
||||
|
||||
//Get a visual for the content
|
||||
var btnContent = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(btn, 0), 0);
|
||||
var btnContentVisual = ElementCompositionPreview.GetElementVisual(btnContent as FrameworkElement);
|
||||
|
||||
var easing = compositor.CreateLinearEasingFunction();
|
||||
|
||||
if (_flipBatchAnimation != null)
|
||||
{
|
||||
_flipBatchAnimation.Completed -= FlipBatchAnimation_Completed;
|
||||
_flipBatchAnimation.Dispose();
|
||||
}
|
||||
|
||||
_flipBatchAnimation = compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
|
||||
_flipBatchAnimation.Completed += FlipBatchAnimation_Completed;
|
||||
|
||||
ScalarKeyFrameAnimation flipAnimation = compositor.CreateScalarKeyFrameAnimation();
|
||||
flipAnimation.InsertKeyFrame(0.000001f, 180);
|
||||
flipAnimation.InsertKeyFrame(1f, 0, easing);
|
||||
flipAnimation.Duration = TimeSpan.FromMilliseconds(800);
|
||||
flipAnimation.IterationBehavior = AnimationIterationBehavior.Count;
|
||||
flipAnimation.IterationCount = 1;
|
||||
btnVisual.CenterPoint = new Vector3((float)(0.5 * btn.ActualWidth), (float)(0.5f * btn.ActualHeight), 0f);
|
||||
btnVisual.RotationAxis = new Vector3(0.0f, 1f, 0f);
|
||||
|
||||
ScalarKeyFrameAnimation appearAnimation = compositor.CreateScalarKeyFrameAnimation();
|
||||
appearAnimation.InsertKeyFrame(0.0f, 0);
|
||||
appearAnimation.InsertKeyFrame(0.599999f, 0);
|
||||
appearAnimation.InsertKeyFrame(0.6f, 0.5f);
|
||||
appearAnimation.InsertKeyFrame(1f, 1);
|
||||
appearAnimation.Duration = TimeSpan.FromMilliseconds(800);
|
||||
appearAnimation.IterationBehavior = AnimationIterationBehavior.Count;
|
||||
appearAnimation.IterationCount = 1;
|
||||
|
||||
btnVisual.StartAnimation(nameof(btnVisual.RotationAngleInDegrees), flipAnimation);
|
||||
btnContentVisual.StartAnimation(nameof(btnContentVisual.Opacity), appearAnimation);
|
||||
_flipBatchAnimation.End();
|
||||
|
||||
if (_usePictures)
|
||||
{
|
||||
var file = await StorageFile.GetFileFromPathAsync(btn.Tag.ToString());
|
||||
using (var stream = await file.OpenAsync(FileAccessMode.Read))
|
||||
{
|
||||
var image = new Image();
|
||||
var bmp = new BitmapImage();
|
||||
await bmp.SetSourceAsync(stream);
|
||||
image.Source = bmp;
|
||||
btn.Content = image;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
btn.Content = btn.Tag.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void FlipBatchAnimation_Completed(object sender, CompositionBatchCompletedEventArgs args)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
|
||||
<Identity Name="58ad5d18-bbbc-4f4c-83c0-19bc082f4685" Publisher="CN=harishsk" Version="1.0.24.0" />
|
||||
<Identity Name="58ad5d18-bbbc-4f4c-83c0-19bc082f4685" Publisher="CN=harishsk" Version="1.0.31.0" />
|
||||
<mp:PhoneIdentity PhoneProductId="58ad5d18-bbbc-4f4c-83c0-19bc082f4685" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||
<Properties>
|
||||
<DisplayName>Memory</DisplayName>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<uap:ShowOn Tile="wide310x150Logo" />
|
||||
</uap:ShowNameOnTiles>
|
||||
</uap:DefaultTile>
|
||||
<uap:SplashScreen Image="Assets\SplashScreen.png" />
|
||||
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#9fc79f" />
|
||||
</uap:VisualElements>
|
||||
</Application>
|
||||
</Applications>
|
||||
|
|