11 Commits

Author SHA1 Message Date
0a415a2292 checkpoint 2025-09-05 18:13:35 -05:00
e2a8b771d9 const over var 2025-05-11 15:46:26 -05:00
0431fb2950 yep 2025-05-04 13:45:30 -05:00
83dd4cc4a3 Group pieces in the hand. 2024-11-26 15:26:47 -06:00
1ed1ad09af Forgot password 2024-11-26 17:42:46 +00:00
964f3bfb30 Fix "Login to play!" when session has 2 players. 2024-11-17 10:12:43 -06:00
fe4b013ed0 Fix navbar text alignment 2024-11-17 09:28:57 -06:00
e87bdf8b52 Style boost 2024-11-16 23:13:56 -06:00
fbdaf29f43 Style boost 2024-11-16 21:56:46 -06:00
b5c6b8244d Style boost 2024-11-16 21:39:17 -06:00
48ab8f7964 style boost 2024-11-16 20:02:56 -06:00
58 changed files with 1237 additions and 740 deletions

120
BoardRules/BoardRules.cs Normal file
View File

@@ -0,0 +1,120 @@
//using System.Drawing;
//using System.Numerics;
//namespace BoardRules;
//public static class PieceMoves
//{
// public static readonly ICollection<Vector2> GoldGeneralMoves =
// [
// new(-1, 1),
// new(0, 1),
// new(1, 1),
// new(-1, 0),
// new(1, 0),
// new(0, -1)
// ];
// public static readonly ICollection<Vector2> PawnMoves = [new(0, 1)];
// public static readonly ICollection<Vector2> KnightMoves = [new(-1, 2), new(1, 2)];
// public static readonly ICollection<Vector2> BishopMoves =
// [
// new(float.NegativeInfinity, float.NegativeInfinity),
// new(float.NegativeInfinity, float.PositiveInfinity),
// new(float.PositiveInfinity, float.PositiveInfinity),
// new(float.PositiveInfinity, float.NegativeInfinity),
// ];
//}
//public class BoardRules
//{
// private readonly Dictionary<string, IPiece> pieces = [];
// public BoardRules WithSize(int width, int height)
// {
// this.BoardSize = new Size(width, height);
// return this;
// }
// public Size BoardSize { get; private set; }
// public BoardRules AddPiece(IPiece piece)
// {
// pieces.Add(piece.Name, piece);
// return this;
// }
//}
//public class BoardPieceRules(BoardRules rules, IPiece piece)
//{
// public IPiece Piece { get; } = piece;
// public BoardRules WithStartingPositions(ICollection<Vector2> positions)
// {
// // Validate positions against board size
// foreach (var pos in positions)
// {
// if (pos.X < 0 || pos.Y < 0 || pos.X >= rules.BoardSize.Width || pos.Y >= rules.BoardSize.Height)
// {
// throw new ArgumentOutOfRangeException(nameof(positions), $"Position {pos} is out of bounds for board size {rules.BoardSize}.");
// }
// }
// // Assuming piece has a way to set starting positions, which it currently does not.
// // This is just a placeholder to show intent.
// // piece.SetStartingPositions(positions);
// return rules;
// }
//}
//public interface IPiece
//{
// public string Name { get; }
// public ICollection<Vector2> MoveSet { get; }
// public ICollection<Vector2> PromotedMoveSet { get; }
// /// <summary>
// /// The starting positions for this type of piece on the board. There could be one or many.
// /// </summary>
// public ICollection<Vector2> StartingPositions { get; }
//}
//public class GoldGeneral : IPiece
//{
// public string Name => nameof(GoldGeneral);
// public ICollection<Vector2> MoveSet => PieceMoves.GoldGeneralMoves;
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.GoldGeneralMoves;
// public ICollection<Vector2> StartingPositions => [new(3, 0), new(5, 0), new(4, 1)];
//}
//public class Pawn : IPiece
//{
// public string Name => nameof(Pawn);
// public ICollection<Vector2> MoveSet => PieceMoves.PawnMoves;
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.GoldGeneralMoves;
//}
//public class Knight : IPiece
//{
// public string Name => nameof(Knight);
// public ICollection<Vector2> MoveSet => PieceMoves.KnightMoves;
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.GoldGeneralMoves;
//}
//public class Bishop : IPiece
//{
// public string Name => nameof(Bishop);
// public ICollection<Vector2> MoveSet => PieceMoves.BishopMoves;
// public ICollection<Vector2> PromotedMoveSet => PieceMoves.BishopMoves;
//}
//public class Luke
//{
// public void Yep()
// {
// var board = new BoardRules()
// .WithSize(9, 9)
// .AddPiece(new Pawn())
// }
//}

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -32,3 +32,9 @@ public enum WhichPiece
Pawn,
//PromotedPawn,
}
public enum WhichPlayer
{
Player1,
Player2
}

View File

@@ -1,4 +1,4 @@
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
namespace Shogi.Domain.ValueObjects;
public static class Direction
{

View File

@@ -1,4 +1,4 @@
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
namespace Shogi.Domain.ValueObjects;
public enum Distance
{

View File

@@ -1,6 +1,6 @@
using System.Diagnostics;
namespace Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
namespace Shogi.Domain.ValueObjects.Movement;
[DebuggerDisplay("{Step} - {Distance}")]
public record Path
@@ -17,7 +17,7 @@ public record Path
public Path(Vector2 step, Distance distance = Distance.OneStep)
{
Step = step;
this.Distance = distance;
Distance = distance;
}
public Path Invert() => new(Vector2.Negate(Step), Distance);

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects;

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects;

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Diagnostics;
namespace Shogi.Domain.ValueObjects

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects;

View File

@@ -1,4 +1,4 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Collections.ObjectModel;
namespace Shogi.Domain.ValueObjects

View File

@@ -1,4 +1,5 @@
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
using Shogi.Domain.ValueObjects.Movement;
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
namespace Shogi.Domain.ValueObjects;
/// <summary>
@@ -247,7 +248,7 @@ public sealed class ShogiBoard(BoardState initialState)
{
var list = new List<Vector2>(10);
var position = path.Step + piecePosition;
if (path.Distance == YetToBeAssimilatedIntoDDD.Pathing.Distance.MultiStep)
if (path.Distance == Distance.MultiStep)
{
while (position.IsInsideBoardBoundary())
@@ -340,7 +341,7 @@ public sealed class ShogiBoard(BoardState initialState)
else
{
var multiStepPaths = matchingPaths
.Where(path => path.Distance == YetToBeAssimilatedIntoDDD.Pathing.Distance.MultiStep)
.Where(path => path.Distance == Distance.MultiStep)
.ToArray();
if (multiStepPaths.Length == 0)
{
@@ -371,7 +372,7 @@ public sealed class ShogiBoard(BoardState initialState)
return new MoveResult(true);
}
private static IEnumerable<Vector2> GetPositionsAlongPath(Vector2 from, Vector2 to, YetToBeAssimilatedIntoDDD.Pathing.Path path)
private static IEnumerable<Vector2> GetPositionsAlongPath(Vector2 from, Vector2 to, Path path)
{
var next = from;
while (next != to && next.X >= 0 && next.X < 9 && next.Y >= 0 && next.Y < 9)

View File

@@ -1,8 +0,0 @@
namespace Shogi.Domain.ValueObjects
{
public enum WhichPlayer
{
Player1,
Player2
}
}

View File

@@ -1,6 +1,7 @@
namespace Shogi.UI.Identity;
using Microsoft.AspNetCore.Components.Authorization;
using System.Net.Http;
using System.Net.Http.Json;
using System.Security.Claims;
using System.Text;
@@ -235,6 +236,38 @@ public class CookieAuthenticationStateProvider : AuthenticationStateProvider, IA
return _authenticated;
}
/// <summary>
/// Ask for an email to be sent which contains a reset code. This reset code is used during <see cref="ChangePassword"/>
/// </summary>
/// <remarks>Do not surface errors from this to users which may tell bad actors if emails do or do not exist in the system.</remarks>
public async Task<HttpResponseMessage> RequestPasswordReset(string email)
{
return await _httpClient.PostAsJsonAsync("forgotPassword", new { email });
}
public async Task<FormResult> ChangePassword(string email, string resetCode, string newPassword)
{
var body = new
{
email,
resetCode,
newPassword
};
var response = await _httpClient.PostAsJsonAsync("resetPassword", body);
if (response.IsSuccessStatusCode)
{
return new FormResult { Succeeded = true };
}
else
{
return new FormResult
{
Succeeded = false,
ErrorList = [await response.Content.ReadAsStringAsync()]
};
}
}
public class RoleClaim
{
public string? Issuer { get; set; }

View File

@@ -28,4 +28,6 @@ public interface IAccountManagement
public Task<FormResult> RegisterAsync(string email, string password);
public Task<bool> CheckAuthenticatedAsync();
Task<HttpResponseMessage> RequestPasswordReset(string email);
Task<FormResult> ChangePassword(string email, string resetCode, string newPassword);
}

View File

@@ -1,12 +1,6 @@
.MainLayout {
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: 100vh;
grid-template-rows: auto 1fr;
place-items: stretch;
}
@media all and (max-width: 600px) {
.MainLayout {
grid-template-columns: min-content max-content;
}
gap: 5px;
}

View File

@@ -1,44 +1,77 @@
@inject NavigationManager navigator
@inject ShogiApi Api
<div class="NavMenu PrimaryTheme ThemeVariant--Contrast">
@* Desktop view *@
<nav class="NavMenu PrimaryTheme ThemeVariant--Contrast">
<h1>Shogi</h1>
<p>
<a href="">Home</a>
</p>
<p>
<a href="search">Search</a>
</p>
<AuthorizeView>
<p>
<button class="href" @onclick="CreateSession">Create</button>
</p>
</AuthorizeView>
<div class="spacer" />
<AuthorizeView>
<Authorized>
<p>@context.User.Identity?.Name</p>
<p>
<span>@context.User.Identity?.Name</span>
<a href="logout">Logout</a>
</p>
</Authorized>
<NotAuthorized>
<p>
<a href="login">Login</a>
</p>
<p>
<a href="register">Register</a>
</p>
</NotAuthorized>
</AuthorizeView>
</div>
</nav>
@* Mobile view *@
<nav class="NavMenu PrimaryTheme ThemeVariant--Contrast compact">
<div class="flex">
<h1>Shogi</h1>
<AuthorizeView>
<span>@context.User.Identity?.Name</span>
</AuthorizeView>
<button class="href" @onclick="() => isExpanded = !isExpanded">
@(isExpanded ? "Collapse" : "Expand")
</button>
</div>
<div class="drop-down @ExpandedCss">
<ul>
<li>
<a href="">Home</a>
</li>
<li>
<a href="search">Search</a>
</li>
<AuthorizeView>
<Authorized>
<li>
<button class="href" @onclick="CreateSession">Create</button>
</li>
<li>
<a href="logout">Logout</a>
</li>
</Authorized>
<NotAuthorized>
<li>
<a href="login">Login</a>
</li>
<li>
<a href="register">Register</a>
</li>
</NotAuthorized>
</AuthorizeView>
</ul>
</div>
</nav>
@code {
private bool isExpanded = false;
async Task CreateSession()
{
@@ -49,4 +82,5 @@
}
}
string ExpandedCss => isExpanded ? "expand" : string.Empty;
}

View File

@@ -1,15 +1,45 @@
.NavMenu {
display: flex;
flex-direction: column;
border-right: 2px solid #444;
}
.NavMenu > * {
align-items: baseline;
gap: 0.75rem;
padding: 0 0.5rem;
}
.NavMenu h1 {
}
.NavMenu .spacer {
.NavMenu .spacer {
flex: 1;
}
/******************/
/* Mobile Nav Menu*/
/******************/
.NavMenu.compact {
/* display is changed in @media */
display: none;
}
.NavMenu.compact .flex {
display: flex;
justify-content: space-between;
}
.NavMenu.compact .drop-down {
height: 0;
overflow-y: clip;
transition: height 0.25s ease-in;
}
.NavMenu.compact .drop-down.expand {
height: 100px;
}
@media all and (max-width: 750px) {
.NavMenu.compact {
display: block;
}
.NavMenu {
display: none;
}
}

View File

@@ -34,7 +34,6 @@
</main>
@code {
private bool show = true;
private string activeSessionName = string.Empty;
private Task OnLoginChanged()
{
@@ -46,10 +45,4 @@
activeSessionName = s.SessionId.ToString();
StateHasChanged();
}
private void OnClickClose()
{
show = false;
StateHasChanged();
}
}

View File

@@ -0,0 +1,125 @@
@page "/forgot"
@inject IAccountManagement Acct
<main class="PrimaryTheme">
<h1>Forgot Password</h1>
@if (isReset)
{
<p>Your password has been reset. Log in with your new password any time.</p>
} else if (isCodeSent)
{
<p>Look for an email from shogi@lucaserver.space with a reset code and fill out the form.</p>
}
<section class="ForgotForm">
@if (errorList.Length > 0)
{
<ul class="Errors" style="grid-area: errors">
@foreach (var error in errorList)
{
<li>@error</li>
}
</ul>
}
<label>
Email
@if (!isCodeSent)
{
<input required name="email" type="email" @bind-value="email" />
}
else
{
<span>@email</span>
}
</label>
@if (!isCodeSent)
{
<button @onclick="SendResetCode">Send a reset code</button>
}
else
{
<label>
Reset code
<input required name="resetCode" type="text" @bind-value="code" />
</label>
<label>
New Password
<input required name="newPassword" type="password" @bind-value="newPassword" />
</label>
<label>
Confirm Password
<input required name="confirmPassword" type="password" @bind-value="confirmPassword" />
</label>
<button @onclick="ChangePassword">Change my password</button>
}
</section>
</main>
@code {
private bool isCodeSent = false;
private bool isReset = false;
private string email = string.Empty;
private string code = string.Empty;
private string newPassword = string.Empty;
private string confirmPassword = string.Empty;
private string[] errorList = [];
async Task SendResetCode()
{
if (string.IsNullOrWhiteSpace(email))
{
errorList = ["Email is required"];
return;
}
var response = await Acct.RequestPasswordReset(email);
isCodeSent = response.IsSuccessStatusCode;
if (!response.IsSuccessStatusCode)
{
errorList = [await response.Content.ReadAsStringAsync()];
}
}
async Task ChangePassword()
{
var errors = new List<string>(5);
if (string.IsNullOrWhiteSpace(email))
{
errors.Add("Email is required");
}
if (string.IsNullOrWhiteSpace(code))
{
errors.Add("Reset code is required");
}
if (string.IsNullOrWhiteSpace(newPassword))
{
errors.Add("New password is required");
}
if (!newPassword.Equals(confirmPassword))
{
errors.Add("Your new password and confirm password do not match");
}
var result = await Acct.ChangePassword(email, code, newPassword);
if (result.Succeeded)
{
isReset = true;
ClearFormFields();
}
else
{
errorList = result.ErrorList;
}
}
void ClearFormFields() {
email = code = newPassword = confirmPassword = string.Empty;
}
}

View File

@@ -0,0 +1,25 @@
main {
padding: 1rem;
}
.ForgotForm {
display: inline-flex;
flex-direction: column;
align-items: stretch;
gap: 1rem;
}
.ForgotForm label {
display: flex;
justify-content: space-between;
gap: 1rem;
}
.ForgotForm button {
align-self: end;
}
.ForgotForm .Errors {
color: darkred;
background-color: var(--foregroundColor)
}

View File

@@ -27,6 +27,8 @@
<label for="password" style="grid-area: passLabel">Password</label>
<input required id="password" name="passwordInput" type="password" style="grid-area: passControl" @bind-value="password" />
<a href="forgot" style="grid-area: resetLink; place-self: end;">Reset password</a>
<button style="grid-area: button" @onclick="DoLoginAsync">Login</button>
</NotAuthorized>
</AuthorizeView>

View File

@@ -1,28 +1,20 @@
main {
/*display: grid;
grid-template-areas:
"header header header"
". form ."
". . .";
grid-template-rows: auto 1fr 1fr;
place-items: center;
*/
padding: 1rem;
}
.LoginForm {
grid-area: form;
display: inline-grid;
grid-template-areas:
"errors errors"
"emailLabel emailControl"
"passLabel passControl"
". resetLink"
"button button";
gap: 0.5rem 3rem;
}
.LoginForm .Errors {
.LoginForm .Errors {
color: darkred;
}
background-color: var(--foregroundColor);
}

View File

@@ -3,7 +3,7 @@
<article class="game-board">
<!-- Game board -->
<section class="board" data-perspective="@Perspective">
<section class="board" data-perspective="@Perspective" style="grid-area: board">
@for (var rank = 1; rank < 10; rank++)
{
foreach (var file in Files)
@@ -11,17 +11,20 @@
var position = $"{file}{rank}";
var piece = Session?.BoardState.Board[position];
var isSelected = piece != null && SelectedPosition == position;
<div class="tile" @onclick="OnClickTileInternal(position)"
<div class="tile"
@onclick="OnClickTileInternal(position)"
data-position="@(position)"
data-selected="@(isSelected)"
data-upsidedown="@(piece?.Owner != Perspective)"
style="grid-area: @position">
@if (piece != null)
{
<GamePiece Piece="piece" Perspective="Perspective" />
<GamePiece Piece="piece.WhichPiece" IsPromoted="piece.IsPromoted" />
}
</div>
}
}
</section>
<div class="ruler vertical" style="grid-area: rank">
<span>9</span>
<span>8</span>
@@ -44,66 +47,85 @@
<span>H</span>
<span>I</span>
</div>
</section>
<!-- Side board -->
@if (Session != null && UseSideboard == true)
{
<aside class="side-board PrimaryTheme ThemeVariant--Contrast">
<div class="player-area">
<div class="hand">
@if (opponentHand.Any())
@* <aside class="side-board PrimaryTheme ThemeVariant--Contrast" style="grid-area: opponent-side-board"> *@
@* @if (opponentHand.Any()) *@
@* { *@
@* @foreach (var piece in opponentHand) *@
@* { *@
@* <div class="tile" *@
@* data-upsidedown="@(piece.Owner != Perspective)"> *@
@* <GamePiece Piece="piece.WhichPiece" IsPromoted="false" /> *@
@* </div> *@
@* } *@
@* } *@
@* </aside> *@
<aside class="side-board PrimaryTheme ThemeVariant--Contrast" style="grid-area: opponent-side-board">
@if (OpponentHandGrouped.Any())
{
@foreach (var piece in opponentHand)
@foreach (var (whichPiece, count) in OpponentHandGrouped)
{
<div class="tile">
<GamePiece Piece="piece" Perspective="Perspective" />
<div class="tile"
data-upsidedown>
<GamePiece Piece="whichPiece" IsPromoted="false" Count="count"/>
</div>
}
}
</aside>
<div class="player-info" style="grid-area: opponent-info">
<OpponentName Name="@opponentName"
IsTurn="!IsMyTurn"
InCheck="IsOpponentInCheck"
IsVictor="IsOpponentVictor" />
</div>
<p class="text-center">Opponent's Hand</p>
<div class="player-info" style="grid-area: player-info">
<PlayerName Name="@userName"
IsTurn="IsMyTurn"
InCheck="IsPlayerInCheck"
IsVictor="IsPlayerVictor" />
</div>
<div class="place-self-center">
<PlayerName Name="@opponentName" IsTurn="!IsMyTurn" InCheck="IsOpponentInCheck" IsVictor="IsOpponentVictor" />
<hr />
<PlayerName Name="@userName" IsTurn="IsMyTurn" InCheck="IsPlayerInCheck" IsVictor="IsPlayerVictor" />
</div>
<div class="player-area">
<AuthorizeView>
<Authorized>
<aside class="side-board PrimaryTheme ThemeVariant--Contrast" style="grid-area: player-side-board">
@if (Perspective == WhichPlayer.Player2 && string.IsNullOrEmpty(Session.Player2))
{
<AuthorizeView>
<div class="place-self-center">
<button @onclick="OnClickJoinGameInternal">Join Game</button>
</div>
</AuthorizeView>
}
else
{
<p class="text-center">Your Hand</p>
<div class="hand">
@if (userHand.Any())
else if (userHand.Any())
{
@foreach (var piece in userHand)
{
<div @onclick="OnClickHandInternal(piece)"
class="tile"
data-selected="@(piece.WhichPiece == SelectedPieceFromHand)">
<GamePiece Piece="piece" Perspective="Perspective" />
<GamePiece Piece="piece.WhichPiece" IsPromoted="false" />
</div>
}
}
</div>
}
</div>
</aside>
</Authorized>
<NotAuthorized>
<aside class="login-to-play PrimaryTheme ThemeVariant--Contrast" style="grid-area: player-side-board">
@if (Perspective == WhichPlayer.Player2 && string.IsNullOrEmpty(Session.Player2))
{
<p><a href="login">Log in</a> to play!</p>
}
</aside>
</NotAuthorized>
</AuthorizeView>
}
</article>
@code {
static readonly string[] Files = new[] { "A", "B", "C", "D", "E", "F", "G", "H", "I" };
/// <summary>
@@ -119,12 +141,10 @@
[Parameter] public EventCallback<Piece> OnClickHand { get; set; }
[Parameter] public EventCallback OnClickJoinGame { get; set; }
[Parameter] public bool UseSideboard { get; set; } = true;
private IReadOnlyCollection<Piece> opponentHand;
private IReadOnlyCollection<Piece> userHand;
private string? userName;
private string? opponentName;
public GameBoardPresentation()
{
opponentHand = Array.Empty<Piece>();
@@ -136,6 +156,7 @@
protected override void OnParametersSet()
{
base.OnParametersSet();
if (Session == null)
{
opponentHand = Array.Empty<Piece>();
@@ -160,15 +181,15 @@
}
}
private Dictionary<WhichPiece, int> OpponentHandGrouped => opponentHand.GroupBy(piece => piece.WhichPiece).ToDictionary(grouping => grouping.Key, grouping => grouping.Count());
private Dictionary<WhichPiece, int> PlayerHandGrouped => userHand.GroupBy(piece => piece.WhichPiece).ToDictionary(grouping => grouping.Key, grouping => grouping.Count());
private bool IsMyTurn => Session?.BoardState.WhoseTurn == Perspective;
private bool IsPlayerInCheck => Session?.BoardState.PlayerInCheck == Perspective;
private bool IsOpponentInCheck => Session?.BoardState.PlayerInCheck != null && Session.BoardState.PlayerInCheck != Perspective;
private bool IsPlayerVictor => Session?.BoardState.Victor == Perspective;
private bool IsOpponentVictor => Session?.BoardState.Victor != null && Session.BoardState.Victor != Perspective;
private Func<Task> OnClickTileInternal(string position) => () =>

View File

@@ -1,50 +1,57 @@
.game-board {
--ratio: 0.9;
display: grid;
grid-template-columns: min-content repeat(9, minmax(2rem, 4rem)) max-content;
grid-template-rows: repeat(9, 1fr) auto;
grid-template-areas:
"rank board opponent-side-board"
"rank board opponent-info"
"rank board player-info"
"rank board player-side-board"
". file .";
grid-template-columns: auto 1fr auto;
grid-template-rows: 3fr 1fr 1fr 3fr auto;
background-color: #444;
gap: 3px;
gap: 5px;
place-self: center;
color: beige;
}
.game-board [data-upsidedown] {
transform: rotateZ(180deg);
}
.board {
display: grid;
grid-column: span 10;
grid-row: span 10;
grid-template-areas:
"rank A9 B9 C9 D9 E9 F9 G9 H9 I9"
"rank A8 B8 C8 D8 E8 F8 G8 H8 I8"
"rank A7 B7 C7 D7 E7 F7 G7 H7 I7"
"rank A6 B6 C6 D6 E6 F6 G6 H6 I6"
"rank A5 B5 C5 D5 E5 F5 G5 H5 I5"
"rank A4 B4 C4 D4 E4 F4 G4 H4 I4"
"rank A3 B3 C3 D3 E3 F3 G3 H3 I3"
"rank A2 B2 C2 D2 E2 F2 G2 H2 I2"
"rank A1 B1 C1 D1 E1 F1 G1 H1 I1"
". file file file file file file file file file";
grid-template-columns: subgrid;
grid-template-rows: subgrid;
"A9 B9 C9 D9 E9 F9 G9 H9 I9"
"A8 B8 C8 D8 E8 F8 G8 H8 I8"
"A7 B7 C7 D7 E7 F7 G7 H7 I7"
"A6 B6 C6 D6 E6 F6 G6 H6 I6"
"A5 B5 C5 D5 E5 F5 G5 H5 I5"
"A4 B4 C4 D4 E4 F4 G4 H4 I4"
"A3 B3 C3 D3 E3 F3 G3 H3 I3"
"A2 B2 C2 D2 E2 F2 G2 H2 I2"
"A1 B1 C1 D1 E1 F1 G1 H1 I1";
grid-template-columns: repeat(9, 1fr);
grid-template-rows: repeat(9, 1fr);
background-color: #444444;
max-height: 100%;
gap: 3px;
max-height: 80vmin;
aspect-ratio: var(--ratio);
}
.board[data-perspective="Player2"] {
grid-template-areas:
"rank I1 H1 G1 F1 E1 D1 C1 B1 A1"
"rank I2 H2 G2 F2 E2 D2 C2 B2 A2"
"rank I3 H3 G3 F3 E3 D3 C3 B3 A3"
"rank I4 H4 G4 F4 E4 D4 C4 B4 A4"
"rank I5 H5 G5 F5 E5 D5 C5 B5 A5"
"rank I6 H6 G6 F6 E6 D6 C6 B6 A6"
"rank I7 H7 G7 F7 E7 D7 C7 B7 A7"
"rank I8 H8 G8 F8 E8 D8 C8 B8 A8"
"rank I9 H9 G9 F9 E9 D9 C9 B9 A9"
". file file file file file file file file file";
"I1 H1 G1 F1 E1 D1 C1 B1 A1"
"I2 H2 G2 F2 E2 D2 C2 B2 A2"
"I3 H3 G3 F3 E3 D3 C3 B3 A3"
"I4 H4 G4 F4 E4 D4 C4 B4 A4"
"I5 H5 G5 F5 E5 D5 C5 B5 A5"
"I6 H6 G6 F6 E6 D6 C6 B6 A6"
"I7 H7 G7 F7 E7 D7 C7 B7 A7"
"I8 H8 G8 F8 E8 D8 C8 B8 A8"
"I9 H9 G9 F9 E9 D9 C9 B9 A9";
}
.tile {
display: grid;
place-content: center;
@@ -77,37 +84,58 @@
}
.side-board {
grid-row: span 9;
display: flex;
flex-direction: column;
place-content: space-between;
padding: 1rem;
display: grid;
grid-template-columns: repeat(auto-fill, 3rem);
place-items: end start;
gap: 5px;
padding: 0.25rem;
background: linear-gradient(45deg, beige, white);
}
.side-board .player-area {
display: grid;
place-items: stretch;
.side-board.opponent {
place-items: start;
}
.side-board .hand {
display: grid;
border: 1px solid #ccc;
grid-template-columns: repeat(auto-fill, 3rem);
grid-template-rows: 3rem;
place-items: center start;
padding: 0.5rem;
.side-board:empty {
content: 'Captured Pieces';
}
.player-info {
display: flex;
flex-direction: column;
justify-content: space-around;
align-content: stretch;
}
@media all and (max-width: 1000px) {
.login-to-play {
background: linear-gradient(45deg, beige, white);
display: grid;
place-content: center;
min-height: 2rem;
}
@media all and (max-width: 750px) {
.game-board {
grid-template-columns: min-content repeat(9, minmax(2rem, 4rem));
grid-template-rows: repeat(9, 1fr) auto max-content;
grid-template-areas:
". opponent-side-board"
". opponent-info"
"rank board"
". file"
". player-info"
". player-side-board";
grid-template-rows: repeat(2, auto) 1fr repeat(3, auto);
gap: 0.25rem;
}
.board {
min-height: 95vmin;
}
.side-board {
grid-row: unset;
grid-column: span 10;
flex-direction: row;
min-height: 2rem;
}
.player-info {
text-align: center;
}
}

View File

@@ -0,0 +1,38 @@
@using Shogi.Contracts.Types
<div style="margin: 0" class="PrimaryTheme">
@if (IsTurn)
{
<span class="turn-marker" title="Shows which player is next to move a piece.">Turn</span>
<span>&nbsp;</span>
}
@if (InCheck)
{
<span class="check-marker" title="King is in danger!">Check</span>
<span>&nbsp;</span>
}
@if (IsVictor)
{
<span class="victory-marker" title="Victory!">Victor</span>
<span>&nbsp;</span>
}
@if (string.IsNullOrEmpty(Name))
{
<p>Empty Seat</p>
}
else
{
<p>@Name</p>
}
</div>
@code {
[Parameter][EditorRequired] public bool IsTurn { get; set; }
[Parameter][EditorRequired] public bool InCheck { get; set; }
[Parameter][EditorRequired] public bool IsVictor { get; set; }
[Parameter][EditorRequired] public string Name { get; set; } = string.Empty;
}

View File

@@ -0,0 +1,28 @@
.turn-marker {
display: inline-block;
padding: 2px 5px;
background-color: var(--foregroundColor);
background-color: var(--middlegroundColor);
color: var(--backgroundColor);
font-weight: bold;
font-size: 80%;
border-radius: 8px;
}
.check-marker {
display: inline-block;
padding: 3px 8px;
background-color: darkred;
color: beige;
font-weight: bold;
font-size: 80%;
}
.victory-marker {
display: inline-block;
padding: 3px 8px;
background-color: darkgreen;
color: beige;
font-weight: bold;
font-size: 80%;
}

View File

@@ -1,4 +1,15 @@
<p style="margin: 0">
@using Shogi.Contracts.Types
<div style="margin: 0" class="PrimaryTheme PlayerName">
@if (string.IsNullOrEmpty(Name))
{
<p>Empty Seat</p>
}
else
{
<p>@Name</p>
}
@if (IsTurn)
{
<span class="turn-marker" title="Shows which player is next to move a piece.">Turn</span>
@@ -16,17 +27,7 @@
<span class="victory-marker" title="Victory!">Victor</span>
<span>&nbsp;</span>
}
@if (string.IsNullOrEmpty(Name))
{
<span>Empty Seat</span>
}
else
{
<span>@Name</span>
}
</p>
</div>
@code {
[Parameter][EditorRequired] public bool IsTurn { get; set; }

View File

@@ -1,26 +1,30 @@
.turn-marker {
display: inline-block;
padding: 3px 8px;
background-color: #444;
color: beige;
padding: 2px 5px;
background-color: var(--foregroundColor);
background-color: var(--middlegroundColor);
color: var(--backgroundColor);
font-weight: bold;
font-size: 80%;
border-radius: 8px;
}
.check-marker {
display: inline-block;
padding: 3px 8px;
background-color: darkred;
color: beige;
padding: 2px 5px;
background-color: #f3a1a1;
color: darkred;
font-weight: bold;
font-size: 80%;
border-radius: 8px;
}
.victory-marker {
display: inline-block;
padding: 3px 8px;
padding: 2px 5px;
background-color: darkgreen;
color: beige;
color: white;
font-weight: bold;
font-size: 80%;
border-radius: 8px;
}

View File

@@ -1,7 +1,7 @@
@using Shogi.Contracts.Types
<div class="game-piece" title="@HtmlTitle" data-upsidedown="@(Piece?.Owner != Perspective)" data-owner="@Piece?.Owner.ToString()">
@switch (Piece?.WhichPiece)
<div class="game-piece" title="@HtmlTitle">
@switch (Piece)
{
case WhichPiece.Bishop:
<Bishop IsPromoted="@IsPromoted" />
@@ -31,18 +31,18 @@
@*render nothing*@
break;
}
@if (Count > 0)
{
<span class="counter">@Count</span>
}
</div>
@code {
[Parameter]
public Contracts.Types.Piece? Piece { get; set; }
[Parameter] public WhichPiece? Piece { get; set; }
[Parameter] public bool IsPromoted { get; set; }
[Parameter] public int Count { get; set; }
[Parameter]
public WhichPlayer Perspective { get; set; }
private bool IsPromoted => Piece != null && Piece.IsPromoted;
private string HtmlTitle => Piece?.WhichPiece switch
private string HtmlTitle => Piece switch
{
WhichPiece.Bishop => "Bishop",
WhichPiece.GoldGeneral => "Gold General",

View File

@@ -1,12 +1,25 @@
::deep svg {
max-width: 100%;
max-height: 100%;
}
[data-upsidedown] {
transform: rotateZ(180deg);
height: auto;
}
.game-piece {
overflow: hidden; /* Because SVGs have weird sizes. */
position: relative;
}
.game-piece .counter {
display: grid;
place-content: center;
position: absolute;
top: 0;
left: 0;
padding: 2px;
z-index: 100;
background-color: white;
border-radius: 9px;
border: 1px solid #444;
aspect-ratio: 1 / 1;
width: 15px;
height: 15px;
}

View File

@@ -1,6 +1,6 @@
@if (IsPromoted)
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuma.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuma.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>龍馬</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ryuuma</rdf:li><rdf:li>ryuume</rdf:li><rdf:li>ryuma</rdf:li><rdf:li>ryume</rdf:li><rdf:li>龍馬</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="35" inkscape:window-y="763" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
@@ -13,7 +13,7 @@
}
else
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kakugyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kakugyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>角行</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kakugyou</rdf:li><rdf:li>kakugyo</rdf:li><rdf:li>角行</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="25" inkscape:window-y="368" inkscape:current-layer="svg2166" />
<defs id="defs2168"> <linearGradient id="linearGradient10936"> <stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /> <stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /> </linearGradient> <linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /> </defs>

View File

@@ -1,4 +1,4 @@
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="gyokushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="gyokushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>玉將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>gyokushou</rdf:li><rdf:li>gyokusho</rdf:li><rdf:li>玉将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="121" inkscape:window-y="181" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,4 +1,4 @@
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kinshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kinshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata16"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>金將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kinshou</rdf:li><rdf:li>kinsho</rdf:li><rdf:li>金将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="10" inkscape:window-y="641" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient2173" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9299803,0,0,0.9377921,6.7492264,12.988526)" /></defs>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,6 +1,6 @@
@if (IsPromoted)
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikei.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikei.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成桂</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narikei</rdf:li><rdf:li>成桂</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="6" inkscape:window-y="772" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,-6.1065495e-2)" /></defs>
@@ -13,7 +13,7 @@
}
else
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="keima.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="keima.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>桂馬</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>keima</rdf:li><rdf:li>桂馬</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="8" inkscape:window-y="757" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,-6.1065495e-2)" /></defs>

View File

@@ -1,6 +1,6 @@
@if (IsPromoted)
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narikyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成香</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narikyou</rdf:li><rdf:li>narikyo</rdf:li><rdf:li>成香</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="32" inkscape:window-y="819" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
@@ -13,7 +13,7 @@
}
else
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kyousha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="kyousha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>香車</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>kyousha</rdf:li><rdf:li>kyosha</rdf:li><rdf:li>香車</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="23" inkscape:window-y="738" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>

View File

@@ -1,6 +1,6 @@
@if (IsPromoted)
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="tokin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="tokin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>と金</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>tokin</rdf:li><rdf:li>と金</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="16" inkscape:window-y="776" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
@@ -13,7 +13,7 @@
}
else
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="fuhyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="fuhyou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>歩兵</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>jp</dc:language><dc:subject><rdf:Bag><rdf:li>fuhyou</rdf:li><rdf:li>fuhyo</rdf:li><rdf:li>歩兵</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="46" inkscape:window-y="46" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>

View File

@@ -1,4 +1,4 @@
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="oushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="oushou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>王將</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>oushou</rdf:li><rdf:li>osho</rdf:li><rdf:li>王将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="38" inkscape:window-y="748" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,6 +1,6 @@
@if (IsPromoted)
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ryuuou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>龍王</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ryuuou</rdf:li><rdf:li>ryuo</rdf:li><rdf:li>龍王</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="11" inkscape:window-y="743" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
@@ -13,7 +13,7 @@
}
else
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="hisha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="hisha.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata16"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>飛車</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>hisha</rdf:li><rdf:li>飛車</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="15" inkscape:window-y="407" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient2173" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.96514,0,0,0.9687658,4.9614803,8.8564779)" /></defs>

View File

@@ -1,6 +1,6 @@
@if (IsPromoted)
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narigin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="narigin.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata14"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>成銀</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>narigin</rdf:li><rdf:li>成銀</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="1" inkscape:window-y="745" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>
@@ -13,7 +13,7 @@
}
else
{
<svg viewbox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ginshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<svg viewBox="0 0 108.07086 124.01575" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="108.07086" height="124.01575" id="svg2166" sodipodi:version="0.32" inkscape:version="0.45" sodipodi:docname="ginshou.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:docbase="C:\Develop\Shogi\Shogi\gfx\default" sodipodi:modified="true">
<metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /><dc:title>銀将</dc:title><dc:date>2007-07-22</dc:date><dc:creator><cc:Agent><dc:title>13xforever</dc:title></cc:Agent></dc:creator><dc:language>ja</dc:language><dc:subject><rdf:Bag><rdf:li>ginshou</rdf:li><rdf:li>ginsho</rdf:li><rdf:li>銀将</rdf:li><rdf:li>shougi</rdf:li><rdf:li>shogi</rdf:li><rdf:li>将棋</rdf:li></rdf:Bag></dc:subject><dc:coverage>board game</dc:coverage></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"><cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata>
<sodipodi:namedview inkscape:window-height="575" inkscape:window-width="765" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" gridtolerance="10.0" objecttolerance="10.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="3.0399365" inkscape:cx="54.035431" inkscape:cy="62.007874" inkscape:window-x="2" inkscape:window-y="400" inkscape:current-layer="svg2166" />
<defs id="defs2168"><linearGradient id="linearGradient10936"><stop style="stop-color:#fcf3e8;stop-opacity:1" offset="0" id="stop10938" /><stop style="stop-color:#ba6100;stop-opacity:1" offset="1" id="stop10940" /></linearGradient><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient10942" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /><linearGradient x1="17.523264" y1="5.9785309" x2="101.69292" y2="113.38583" id="linearGradient12957" xlink:href="#linearGradient10936" gradientUnits="userSpaceOnUse" gradientTransform="translate(3.1889734,0)" /></defs>

View File

@@ -6,7 +6,7 @@
{
return;
}
<main class="PrimaryTheme">
<main class="PrimaryTheme" style="padding: 1rem;">
<GameBoard SessionId="@SessionId" />
</main>

View File

@@ -5,7 +5,6 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.AspNetCore.ResponseCompression;
using Shogi.UI;
using Shogi.UI.Identity;
using Shogi.UI.Pages.Play;
using Shogi.UI.Shared;
using System.Text.Json;
@@ -27,7 +26,7 @@ static void ConfigureDependencies(IServiceCollection services, IConfiguration co
{
/**
* Why two HTTP clients?
* See qhttps://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/additional-scenarios?source=recommendations&view=aspnetcore-6.0#unauthenticated-or-unauthorized-web-api-requests-in-an-app-with-a-secure-default-client
* See https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/additional-scenarios?source=recommendations&view=aspnetcore-6.0#unauthenticated-or-unauthorized-web-api-requests-in-an-app-with-a-secure-default-client
*/
var baseUrl = configuration["ShogiApiUrl"];
if (string.IsNullOrWhiteSpace(baseUrl))

View File

@@ -1,5 +1,5 @@
div {
display: grid;
place-content: stretch;
height: 100%;
min-height: 100%;
}

View File

@@ -15,6 +15,7 @@
<ItemGroup>
<None Remove="Pages\Home\VisualAids\PromotedPieceVisualAid.razor.css" />
<None Remove="Pages\Play\GameBoard\OpponentName.razor.css" />
<None Remove="Pages\Play\GameBoard\PlayerName.razor.css" />
<None Remove="Pages\Play\GameBrowserEntry.razor.css" />
<None Remove="Pages\SearchPage.razor.css" />
@@ -22,6 +23,7 @@
<ItemGroup>
<Content Include="Pages\Home\VisualAids\PromotedPieceVisualAid.razor.css" />
<Content Include="Pages\Play\GameBoard\OpponentName.razor.css" />
<Content Include="Pages\Play\GameBoard\PlayerName.razor.css" />
<Content Include="Pages\Play\GameBrowserEntry.razor.css" />
<Content Include="Pages\SearchPage.razor.css" />
@@ -35,7 +37,6 @@
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.10" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="8.0.10" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.10" />
<PackageReference Include="Microsoft.Authentication.WebAssembly.Msal" Version="8.0.10" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="8.0.1" />
</ItemGroup>

View File

@@ -1,11 +1,10 @@
html, body, #app {
height: 100vh;
min-height: 100vh;
}
body {
margin: 0;
padding: 0;
overflow: hidden;
}
#app {

View File

@@ -44,6 +44,7 @@
color: var(--hrefColor);
padding: 0;
font-size: 100%;
box-shadow: none;
}
.PrimaryTheme button.href:hover {
@@ -55,13 +56,17 @@
margin-bottom: var(--uniformBottomMargin);
}
.PrimaryTheme p:last-child {
margin-bottom: 0;
}
.PrimaryTheme ul {
padding: 0.3rem;
margin: 0;
margin: 0 !important;
margin-bottom: var(--uniformBottomMargin);
background-color: var(--foregroundColor);
color: var(--backgroundColor);
list-style-position: inside;
background-color: var(--backgroundColor);
color: var(--foregroundColor);
list-style: inside square;
}

View File

@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Shogi.UI</title>
<script type="text/javascript">
var base = document.createElement('base');
const base = document.createElement('base');
base.href = window.location.href.includes("localhost")
? "/"
: "/shogi/";

View File

@@ -30,6 +30,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shogi.Api", "Shogi.Api\Shog
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "E2ETests", "Tests\E2ETests\E2ETests.csproj", "{401120C3-45D6-4A23-8D87-C2BED29F4950}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoardRules", "BoardRules\BoardRules.csproj", "{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -67,6 +69,10 @@ Global
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Debug|Any CPU.Build.0 = Debug|Any CPU
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Release|Any CPU.ActiveCfg = Release|Any CPU
{401120C3-45D6-4A23-8D87-C2BED29F4950}.Release|Any CPU.Build.0 = Release|Any CPU
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B2F47A0-6AD5-4DA9-9CFE-9F52F634DD5E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -1,10 +1,10 @@
using System.Numerics;
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
using Shogi.Domain.YetToBeAssimilatedIntoDDD;
using System.Numerics;
namespace UnitTests
namespace UnitTests;
public class NotationShould
{
public class NotationShould
{
[Fact]
public void ConvertFromNotationToVector()
{
@@ -22,5 +22,4 @@ namespace UnitTests
Notation.ToBoardNotation(new Vector2(8, 8)).Should().Be("I9");
Notation.ToBoardNotation(new Vector2(2, 2)).Should().Be("C3");
}
}
}

View File

@@ -1,5 +1,5 @@
using Shogi.Domain.ValueObjects;
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
using Shogi.Domain.ValueObjects.Movement;
using System.Numerics;
namespace UnitTests;

View File

@@ -1,11 +1,9 @@
using Shogi.Domain.ValueObjects;
using System;
using System.Linq;
namespace UnitTests
namespace UnitTests;
public class ShogiShould
{
public class ShogiShould
{
private readonly ITestOutputHelper console;
public ShogiShould(ITestOutputHelper console)
{
@@ -456,5 +454,4 @@ namespace UnitTests
}
private static ShogiBoard MockShogiBoard() => new(BoardState.StandardStarting);
}
}