<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blazor | Learn C Games Programming Blog</title>
	<atom:link href="https://learncgames.com/category/blazor/feed/" rel="self" type="application/rss+xml" />
	<link>https://learncgames.com</link>
	<description>A blog about C, programming games and my ebook(s).</description>
	<lastBuildDate>Tue, 02 Mar 2021 10:41:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://learncgames.com/wp-content/uploads/2020/03/cropped-favicon-32x32.png</url>
	<title>Blazor | Learn C Games Programming Blog</title>
	<link>https://learncgames.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">181446779</site>	<item>
		<title>More notes on my Webassembly web development with Blazor</title>
		<link>https://learncgames.com/more-notes-on-my-webassembly-web-development-with-blazor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-notes-on-my-webassembly-web-development-with-blazor</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Tue, 02 Mar 2021 00:00:48 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2801</guid>

					<description><![CDATA[<p>This is another post in the Inselkampf series. Having spent much of my career creating &#8220;desktop&#8221; application, web always feels a bit different. If it&#8217;s a website then HTML/CSS/PHP + MySql is a reasonable way of working. But when its a web application like a browser game that uses a SQL database, then there&#8217;s a [&#8230;]</p>
The post <a href="https://learncgames.com/more-notes-on-my-webassembly-web-development-with-blazor/">More notes on my Webassembly web development with Blazor</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:133,&quot;href&quot;:&quot;https:\/\/pixabay.com\/users\/geralt-9301\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=4636686&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260128125116\/https:\/\/pixabay.com\/users\/geralt-9301\/?utm_source=link-attribution&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:11:58&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-10 08:53:53&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-15 13:12:19&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-18 18:15:28&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-23 08:45:45&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-27 16:41:45&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-06 14:36:37&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-11 02:32:12&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-15 08:04:58&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-03 02:34:35&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-06 10:26:33&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-09 18:14:50&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-13 10:05:24&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-17 01:55:40&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-20 09:45:45&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 09:45:45&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:134,&quot;href&quot;:&quot;https:\/\/pixabay.com\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=4636686&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260205102120\/https:\/\/pixabay.com\/?utm_source=link-attribution&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:12:00&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-10 08:53:54&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-15 13:12:22&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-18 18:15:28&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-23 08:45:45&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-27 16:41:34&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-06 14:36:33&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-11 02:32:12&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-15 08:04:57&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-03 02:34:32&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-06 10:26:25&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-09 18:14:50&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-13 10:05:27&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-17 01:55:38&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-20 09:07:26&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 09:07:26&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:135,&quot;href&quot;:&quot;https:\/\/dotnet.microsoft.com\/apps\/aspnet\/web-apps\/blazor&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20211208202908\/https:\/\/dotnet.microsoft.com\/apps\/aspnet\/web-apps\/blazor&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:12:02&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-09 21:59:49&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-14 16:38:11&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-18 18:15:28&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-22 03:15:35&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-26 04:32:16&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-02 04:40:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-05 21:12:26&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-09 01:36:03&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-13 08:37:13&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-17 00:37:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-21 00:40:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-25 00:30:33&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-28 05:25:10&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-01 04:35:18&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-04 06:21:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-07 16:19:32&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-11 02:10:47&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-14 08:11:18&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-17 17:53:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-21 01:44:27&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 01:44:27&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:136,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Representational_state_transfer&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260204212147\/https:\/\/en.wikipedia.org\/wiki\/Representational_state_transfer&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:12:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-09 21:59:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-12 22:35:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-18 18:15:29&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-23 08:45:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 12:51:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 14:36:34&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 02:32:12&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-15 08:04:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 02:34:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-06 10:26:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-09 18:14:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-13 02:06:38&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-16 17:56:02&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-20 14:54:22&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 14:54:22&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:137,&quot;href&quot;:&quot;https:\/\/msgpack.org\/index.html&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260206121511\/https:\/\/msgpack.org\/index.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:54:06&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-10 08:53:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 18:15:29&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-23 08:45:47&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-27 19:22:47&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-06 14:36:43&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-11 02:32:12&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-15 08:04:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 02:34:41&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-06 10:26:32&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 18:14:46&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 10:05:26&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-17 01:55:38&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-20 09:45:53&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 09:45:53&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:138,&quot;href&quot;:&quot;https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/blazor\/hosting-models?view=aspnetcore-5.0#:~:text=With%20the%20Blazor%20Server%20hosting,Server%2Dside%20services.&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20220815211219\/https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/blazor\/hosting-models?view=aspnetcore-5.0&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:12:11&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-02-06 12:12:11&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:139,&quot;href&quot;:&quot;https:\/\/www.virtualmin.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260115103406\/https:\/\/www.virtualmin.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:12:13&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-09 21:59:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-15 13:12:27&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 18:15:30&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-28 13:36:22&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-06 14:36:40&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-15 08:05:02&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 02:34:36&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-06 10:26:26&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 18:14:46&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 02:06:45&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-16 17:56:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-20 01:47:28&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 01:47:28&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<figure id="attachment_2802" aria-describedby="caption-attachment-2802" style="width: 300px" class="wp-caption alignleft"><img decoding="async" class="size-medium wp-image-2802" src="https://learncgames.com/wp-content/uploads/2021/02/network-4636686_640-300x129.jpg" alt="Web networking" width="300" height="129" srcset="https://learncgames.com/wp-content/uploads/2021/02/network-4636686_640-300x129.jpg 300w, https://learncgames.com/wp-content/uploads/2021/02/network-4636686_640.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-2802" class="wp-caption-text">Image by <a href="https://pixabay.com/users/geralt-9301/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=4636686">Gerd Altmann</a> from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=4636686">Pixabay</a></figcaption></figure>
<p>This is another post in the <a title="Link to posts with Inselkampf in them" href="https://learncgames.com/?s=Inselkampf" target="_blank" rel="nofollow noopener">Inselkampf series</a>. Having spent much of my career creating &#8220;desktop&#8221; application, web always feels a bit different. If it&#8217;s a website then HTML/CSS/PHP + MySql is a reasonable way of working. But when its a web application like a browser game that uses a SQL database, then there&#8217;s a bit of architecting involved.</p>
<p>I&#8217;m using <a title="Link to Microsoft.com on Blazor" href="https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor" target="_blank" rel="nofollow noopener">Blazor</a> because it lets me write C# that runs in the browser. I&#8217;ve never been a JavaScript fan though I realise many people are. I also have to use database. As I&#8217;ve said before Blazor gives you two choices- The WebAssembly version that runs completely in the browser and the Server version that talks to a server using a protocol called SignalR.</p>
<p>I&#8217;m trying to be clever by using the WebAssembly version but having the C# talk to a <a title="Link to Wikipedia about Restful" href="https://en.wikipedia.org/wiki/Representational_state_transfer" target="_blank" rel="nofollow noopener">restful interface</a>. Restful just means it has a bunch of http calls to do things like update, fetch data, login etc. On the server runs a ASP.NET program implementing this. It&#8217;s headless, as in its not outputting any webpages to the browser but just returns data in JSON (or maybe <a title="Link to msgpack.org" href="https://msgpack.org/index.html" target="_blank" rel="nofollow noopener">MessagePack</a>).</p>
<p>This avoids having a SignalR connection for every user logged into the site which is one way to bring a server to its knees. When you create a Blazor Server application, it has a few disadvantages. As <a title="Link to Docs.Microsoft.com on Blazor server" href="https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-5.0#:~:text=With%20the%20Blazor%20Server%20hosting,Server%2Dside%20services." target="_blank" rel="nofollow noopener">Microsoft says</a>: when you use Blazor server.</p>
<ul>
<li>Higher latency usually exists. Every user interaction involves a network hop.</li>
<li>There&#8217;s no offline support. If the client connection fails, the app stops working.</li>
<li>Scalability is challenging for apps with many users. The server must manage multiple client connections and handle client state.</li>
<li>An ASP.NET Core server is required to serve the app. Serverless deployment scenarios aren&#8217;t possible, such as serving the app from a Content Delivery Network (CDN).</li>
</ul>
<p>I&#8217;m also not using the Microsoft authentication but rolling my own. Yes it&#8217;s possibly not perfect but I&#8217;ve done it before. This way I get to generate recovery numbers. (<em>Both GitHub and Gmail offer these</em>). A bunch of one off codes that are used to authenticate you, if you&#8217;ve lost your password or messed up your email then you login with your account number and an authentication code. This is the only way you get to change email and/or password. You just have to keep the codes safe.</p>
<h3>Rolling my own Interface</h3>
<p>So things like logging in, getting current status, updating game play are all done by making a call to an HTTPS routine. This is all behind the scenes so players see nothing. Values are sent as POST parameters and also include a <strong>nonce</strong>. This word (<em>that unfortunately means sex offender in UK English!)</em> , refers to a special code that has to be supplied with each call to the server to authenticate it. Successful logging in returns a nonce that has to be added as a parameter with every call to the server.</p>
<p>The program on the server that serves the restful calls is a simple ASP.NET Razor pages application (<em>Well maybe Razor, I&#8217;m not sure if I need them</em>). Behind the scenes I&#8217;m using MySQL which was installed as part of <a title="Link to VirtualMin.com" href="https://www.virtualmin.com/" target="_blank" rel="nofollow noopener">VirtualMin</a> (<em>the excellent software I use to setup the VPS</em>).</p>The post <a href="https://learncgames.com/more-notes-on-my-webassembly-web-development-with-blazor/">More notes on my Webassembly web development with Blazor</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2801</post-id>	</item>
		<item>
		<title>Work in Progress &#8211; Web game</title>
		<link>https://learncgames.com/work-in-progress-web-game/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=work-in-progress-web-game</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Fri, 26 Feb 2021 00:00:35 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[inselkampf]]></category>
		<category><![CDATA[wip]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2757</guid>

					<description><![CDATA[<p>I did some investigative work on this at the weekend, This is my Inselkampf type web game. Although I know C#, I&#8217;m fairly new to ASP.NET and Blazor. Now the first thing you&#8217;ll notice about most Blazor examples on the web is that many look like the screenshot. In particular, the purple gradient down the [&#8230;]</p>
The post <a href="https://learncgames.com/work-in-progress-web-game/">Work in Progress – Web game</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:135,&quot;href&quot;:&quot;https:\/\/dotnet.microsoft.com\/apps\/aspnet\/web-apps\/blazor&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20211208202908\/https:\/\/dotnet.microsoft.com\/apps\/aspnet\/web-apps\/blazor&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:12:02&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-09 21:59:49&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-14 16:38:11&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-18 18:15:28&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-22 03:15:35&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-26 04:32:16&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-02 04:40:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-05 21:12:26&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-09 01:36:03&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-13 08:37:13&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-17 00:37:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-21 00:40:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-25 00:30:33&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-28 05:25:10&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-01 04:35:18&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-04 06:21:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-07 16:19:32&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-11 02:10:47&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-14 08:11:18&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-17 17:53:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-21 01:44:27&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 01:44:27&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:142,&quot;href&quot;:&quot;https:\/\/www.freecodecamp.org\/news\/css-example-css3&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251117003357\/https:\/\/www.freecodecamp.org\/news\/css-example-css3\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:13:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 12:38:01&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-14 01:16:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-18 00:35:27&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-22 12:37:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-26 04:32:17&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-02 04:40:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 00:38:59&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-10 20:40:27&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-15 00:40:20&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-19 00:34:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-23 00:37:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-27 00:39:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-31 00:31:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 10:32:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-06 18:24:39&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-10 04:27:38&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-13 12:17:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-16 20:12:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-20 04:04:55&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 04:04:55&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:143,&quot;href&quot;:&quot;https:\/\/gridbyexample.com\/examples&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251206002303\/https:\/\/gridbyexample.com\/examples\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:13:06&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-10 12:38:12&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-14 16:38:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 18:15:36&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-23 20:37:44&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-28 00:38:55&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-04 00:33:40&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-08 00:36:18&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-11 02:07:12&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-15 00:40:20&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-18 16:35:36&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-22 00:32:32&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-26 00:55:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-30 00:39:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-02 20:46:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-06 04:38:51&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 12:30:18&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-12 20:19:59&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-16 04:13:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-19 12:06:59&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-23 00:39:24&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 00:39:24&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:144,&quot;href&quot;:&quot;https:\/\/gridbyexample.com\/examples\/example13&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260130225314\/https:\/\/gridbyexample.com\/examples\/example13\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:13:08&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-10 20:36:05&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-15 00:35:47&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 18:15:36&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-23 04:34:55&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-27 04:24:14&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-02 15:02:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-06 00:39:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-10 08:30:53&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-14 00:37:02&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-17 16:56:46&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-21 00:40:34&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-25 00:30:28&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-28 05:25:25&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-01 04:35:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-04 12:42:51&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-07 20:34:47&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-11 10:09:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-14 18:01:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-18 04:09:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-21 12:02:53&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 12:02:53&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<p><img fetchpriority="high" decoding="async" class="alignleft size-medium wp-image-2758" src="https://learncgames.com/wp-content/uploads/2021/02/blazor-app-300x194.png" alt="Blazor App" width="300" height="194" srcset="https://learncgames.com/wp-content/uploads/2021/02/blazor-app-300x194.png 300w, https://learncgames.com/wp-content/uploads/2021/02/blazor-app-768x497.png 768w, https://learncgames.com/wp-content/uploads/2021/02/blazor-app.png 880w" sizes="(max-width: 300px) 100vw, 300px" />I did some investigative work on this at the weekend, This is my <a title="Link to previous blog entries on Inselkampf" href="https://learncgames.com/?s=inselkampf" target="_blank" rel="nofollow noopener">Inselkampf type web game</a>. Although I know C#, I&#8217;m fairly new to ASP.NET and <a title="Link to Blazor articles on Microsoft.com" href="https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor" target="_blank" rel="nofollow noopener">Blazor</a>. Now the first thing you&#8217;ll notice about most Blazor examples on the web is that many look like the screenshot. In particular, the purple gradient down the left hand side.</p>
<p>So my first job was find out where that&#8217;s defined and try changing it. In the project which is Blazor WebAssembly, there&#8217;s a shared folder and it contains two .css files. MainLayout.razor.css and NavMenu.razor.css. These are the files you need to alter.</p>
<p>Now its probably seven or eight years since I last touched CSS and it has come on quite a bit since then. I discovered css-grid which simplifies things enormously.  If you want to find out more about CSS, take a look on <a title="Link to FreeCodeCamp.org on CSS3" href="https://www.freecodecamp.org/news/css-example-css3/" target="_blank" rel="nofollow noopener">FreeCodeCamp.org</a>. <a title="Link to gridbyexample.com examples" href="https://gridbyexample.com/examples/" target="_blank" rel="nofollow noopener">This site</a> has lots of example layouts using CSS-Grid and I went for <a href="https://gridbyexample.com/examples/example13/">Redefining Grid Areas with Media Queries. </a></p>
<p>This lets you specify a width so you can have a responsive website which adapts to mobile phones as well as desktop. I merged the css and HTML from the example into the project and although its an early stage, I&#8217;m quite pleased with it.</p>
<p><img decoding="async" class="alignleft size-medium wp-image-2760" src="https://learncgames.com/wp-content/uploads/2021/02/game-framework-300x117.png" alt="Game framework" width="300" height="117" srcset="https://learncgames.com/wp-content/uploads/2021/02/game-framework-300x117.png 300w, https://learncgames.com/wp-content/uploads/2021/02/game-framework-1024x400.png 1024w, https://learncgames.com/wp-content/uploads/2021/02/game-framework-768x300.png 768w, https://learncgames.com/wp-content/uploads/2021/02/game-framework.png 1081w" sizes="(max-width: 300px) 100vw, 300px" /> This is very early. The font, colours etc will all change but this has given me a web template with round corners, header, footer and two sidebars.</p>
<p>If I shrink the width of the browser the two sidebars move to positions above and below the main content like this below. It would have taken a lot more effort before css-grid to do this.</p>
<p><img loading="lazy" decoding="async" class="alignleft wp-image-2766 size-medium" src="https://learncgames.com/wp-content/uploads/2021/02/narrow-game-framework-1-300x196.png" alt="Narrow game framework" width="300" height="196" srcset="https://learncgames.com/wp-content/uploads/2021/02/narrow-game-framework-1-300x196.png 300w, https://learncgames.com/wp-content/uploads/2021/02/narrow-game-framework-1.png 649w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>The post <a href="https://learncgames.com/work-in-progress-web-game/">Work in Progress – Web game</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2757</post-id>	</item>
		<item>
		<title>More Thoughts on the Blazor game design</title>
		<link>https://learncgames.com/more-thoughts-on-the-blazor-game-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-thoughts-on-the-blazor-game-design</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Fri, 19 Feb 2021 00:00:05 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Sea game]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2700</guid>

					<description><![CDATA[<p>This is the latest in a series on the design of a web game based loosely on a no-longer-run game called Inselkampf. It won&#8217;t be exactly the same as the original game, I have my own ideas. To see other articles in this series, click here or on the category: Blazor on the right hand [&#8230;]</p>
The post <a href="https://learncgames.com/more-thoughts-on-the-blazor-game-design/">More Thoughts on the Blazor game design</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:162,&quot;href&quot;:&quot;https:\/\/opengameart&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:163,&quot;href&quot;:&quot;https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/tutorials\/signalr-blazor?view=aspnetcore-5.0&amp;tabs=visual-studio&amp;pivots=webassembly&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20211128122449\/https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/tutorials\/signalr-blazor?view=aspnetcore-5.0&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:21:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-13 06:22:46&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 18:15:46&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-27 19:14:35&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-07 19:08:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-17 09:49:41&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 02:34:37&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-06 10:26:28&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 18:14:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 02:06:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-16 17:56:03&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-20 01:47:22&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 01:47:22&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:164,&quot;href&quot;:&quot;https:\/\/kenney.nl&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260205082758\/https:\/\/www.kenney.nl\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:21:59&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 15:36:32&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-15 13:29:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-18 18:15:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-27 19:14:36&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-05 01:30:37&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 22:13:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 09:49:45&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-02 16:20:44&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-06 02:27:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-09 10:15:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-12 18:07:46&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-15 21:50:14&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-19 09:48:37&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-22 17:39:18&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-22 17:39:18&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:165,&quot;href&quot;:&quot;https:\/\/opengameart.org&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260206120722\/https:\/\/opengameart.org\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:22:04&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-13 06:22:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-18 18:15:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-27 19:14:35&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 01:01:44&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 09:49:44&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 02:34:39&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-06 10:26:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-09 18:14:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-13 02:06:42&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-16 12:37:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-20 09:45:50&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 09:45:50&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:166,&quot;href&quot;:&quot;https:\/\/www.reddit.com\/r\/gameassets&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251230120721\/https:\/\/www.reddit.com\/r\/gameassets\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:22:53&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-02-13 06:22:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-18 18:15:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-27 19:14:36&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 01:01:43&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 09:49:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 02:34:40&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-04-06 10:26:25&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 18:14:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 10:05:27&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-16 12:37:55&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-04-20 09:45:47&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 09:45:47&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<figure id="attachment_2705" aria-describedby="caption-attachment-2705" style="width: 248px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="size-medium wp-image-2705" src="https://learncgames.com/wp-content/uploads/2021/02/opengameart-248x300.png" alt="OpenGameArt" width="248" height="300" srcset="https://learncgames.com/wp-content/uploads/2021/02/opengameart-248x300.png 248w, https://learncgames.com/wp-content/uploads/2021/02/opengameart.png 479w" sizes="auto, (max-width: 248px) 100vw, 248px" /><figcaption id="caption-attachment-2705" class="wp-caption-text"><a href="https://opengameart" target="_blank" rel="noopener">OpenGameArt</a></figcaption></figure>
<p>This is the latest in a series on the design of a web game based loosely on a no-longer-run game called Inselkampf. It won&#8217;t be exactly the same as the original game, I have my own ideas. To see other articles in this series, click here or on the <a title="Link to articles in category Blazor" href="https://learncgames.com/category/blazor/" target="_blank" rel="nofollow noopener">category: Blazor</a> on the right hand side.</p>
<p>There are two models with Blazor. Server and WebAssembly. Both are similar but the crucial difference is that WebAssembly can run completely standalone whereas Server needs a connection to a webserver. Server uses <a title="Link to article using SignalR with Blazor" href="https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr-blazor?view=aspnetcore-5.0&amp;tabs=visual-studio&amp;pivots=webassembly" target="_blank" rel="nofollow noopener">SignalR</a> technology.</p>
<p>The danger with using the Server model is that each person playing the game implicitly creates a connection. With the WebAssembly version, there is no direct connection though it makes sense to have a connection of sorts perhaps a Restful type interface.  This means running a query to fetch game data and then running update queries.</p>
<p>So Blazor with WebAssembly it is. Why Blazor? Because it simplifies updating controls on the page.</p>
<h3>Looking after Time</h3>
<p>The nature of this type of game is any construction (<em>buildings and units</em>) takes a finite length of time. which can range from seconds to a day or so  I want to see how long before my gold mine goes up a level and so on. It&#8217;s normal to have all times countdown in the browser. This should put no strain on the server as its running in the browser. Keeping server and client in sync needs a bit of care in case someone figures out how to make the browser code run faster. Once it reaches 0, an update should be sent to the server which should do a quick comparison with its time and if shenanigans has occurred, return an update status and resync the browser to the server. The rule is &#8220;<strong>If you give em a chance to cheat- they will</strong>&#8220;.</p>
<h3>Procuring Graphics</h3>
<p>Much though I like the Inselkampf graphics for all the buildings, I&#8217;m not going to use theirs. It&#8217;s infringing copyright (<em>reimagining the game is not copyright infringement BTW!</em>) . As well as the <a title="Link to Kenney.nl free graphics" href="https://kenney.nl/" target="_blank" rel="nofollow noopener">free kenney graphics</a> that I&#8217;ve <a title="Link to blog about MatchThree" href="https://learncgames.com/working-on-the-match-three-game/" target="_blank" rel="nofollow noopener">mentioned before</a> and various other websites such as <a title="Link to OpenGameArt" href="https://opengameart.org/" target="_blank" rel="nofollow noopener">opengameart</a>, (<em>shown in the screenshot</em>) there is also the Reddit <a title="Link to reddit game assets subreddit" href="https://www.reddit.com/r/gameassets/" target="_blank" rel="nofollow noopener">game assets subreddit</a> so between these and some others I hope I can find what I&#8217;m looking for.  My requirements are quite modest.</p>
<p>&nbsp;</p>The post <a href="https://learncgames.com/more-thoughts-on-the-blazor-game-design/">More Thoughts on the Blazor game design</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2700</post-id>	</item>
		<item>
		<title>Web development- learning Blazor</title>
		<link>https://learncgames.com/web-development-learning-blazor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=web-development-learning-blazor</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Thu, 11 Feb 2021 00:00:01 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[PBBG]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2649</guid>

					<description><![CDATA[<p>I&#8217;ve talked about Inselkampf in a previous post. it was an example of a PBBG (Persistent Browser Based Game).  Currently if you want to write a web application that updates part of a page without refreshing itself, you have to do it via a JavaScript toolkit. People have been doing this going back about 15 [&#8230;]</p>
The post <a href="https://learncgames.com/web-development-learning-blazor/">Web development- learning Blazor</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:185,&quot;href&quot;:&quot;https:\/\/pixabay.com\/users\/kreatikar-8562930\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3411373&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:186,&quot;href&quot;:&quot;https:\/\/pixabay.com\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3411373&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:187,&quot;href&quot;:&quot;https:\/\/www.reddit.com\/r\/PBBG&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251222130551\/https:\/\/www.reddit.com\/r\/PBBG\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:31:54&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-02-11 03:29:39&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-02-18 18:15:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 01:35:25&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-02 15:03:16&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 01:01:43&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-09 11:48:30&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-15 08:05:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-31 04:06:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 18:32:51&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-07 02:23:43&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-10 14:45:44&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-14 10:02:07&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-04-18 01:53:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-21 09:43:20&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 09:43:20&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<figure id="attachment_2650" aria-describedby="caption-attachment-2650" style="width: 300px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="size-medium wp-image-2650" src="https://learncgames.com/wp-content/uploads/2021/02/webdesign-3411373_640-300x200.jpg" alt="Web pages" width="300" height="200" srcset="https://learncgames.com/wp-content/uploads/2021/02/webdesign-3411373_640-300x200.jpg 300w, https://learncgames.com/wp-content/uploads/2021/02/webdesign-3411373_640.jpg 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-2650" class="wp-caption-text">Image by <a href="https://pixabay.com/users/kreatikar-8562930/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3411373">Mudassar Iqbal</a> from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3411373">Pixabay</a></figcaption></figure>
<p>I&#8217;ve talked about <a title="Link to post about Inselkampf" href="https://learncgames.com/thinking-about-my-inselkampf-reimagination/" target="_blank" rel="nofollow noopener">Inselkampf</a> in a previous post. it was an example of a <a title="Link to the PBBG subreddit" href="https://www.reddit.com/r/PBBG/" target="_blank" rel="nofollow noopener">PBBG</a> (Persistent Browser Based Game).  Currently if you want to write a web application that updates part of a page without refreshing itself, you have to do it via a JavaScript toolkit. People have been doing this going back about 15 years or so initially using a technology called AJAX.</p>
<p>Refreshing an entire web page takes a few seconds- some of the pages have got really big what with trackers and other things that bloat them up. So being able to update just part is a massive time saver plus it looks good.  Browser games couldn&#8217;t work without it.</p>
<p>Blazor takes things further by letting you update parts of pages, controls but in C#. There are two types of Blazor. WebAssembly (the machine code of the web) which does everything in the browser. It&#8217;s how the <a title="Link to post about new game platform" href="https://learncgames.com/a-newish-game-platform/" target="_blank" rel="nofollow noopener">trains</a> program works. The other type uses a server and does everything server side (controls and data) then sends it to the browser to be rendered.</p>
<p>For my purposes, the WebAssembly one is better. If you have a lot of people connected to a server then the Blazor server can use a fair whack of server resources. Th Blazor WebAssembly will also connect to the server but just to fetch or update data. So I&#8217;ve bought a Udemy course and am soaking up Blazor.</p>
<p>There&#8217;s still all sorts of questions. For example keeping the tick in synch. PBBG games often have a clock where new resources, building construction happen after a few seconds or longer. If you do this on the server then it&#8217;s not so difficult if the browser gets disconnected. In the browser though, it has to update the server or come up with some scheme so the browser and server don&#8217;t drift part. These are all part of the fun designing and programming such games. But I definitely think Blazor offers a lot of potential here.</p>The post <a href="https://learncgames.com/web-development-learning-blazor/">Web development- learning Blazor</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2649</post-id>	</item>
		<item>
		<title>Amazing multi-platform Asteroids in C#</title>
		<link>https://learncgames.com/amazing-multi-platform-asteroids-in-c/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=amazing-multi-platform-asteroids-in-c</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Sat, 06 Feb 2021 00:00:08 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[asteroids]]></category>
		<category><![CDATA[cross-platform]]></category>
		<category><![CDATA[wasm]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2608</guid>

					<description><![CDATA[<p>Asteroids was the first full arcade game I ever wrote in C. Asteroids in C# takes things to a whole new level.  The solution contains 12 projects in all: Three Blazor projects, a WinForms version, a WPF version, a UWP (Universal Windows Platform) and a Xamarin Android Forms version (shown). You can compile and run [&#8230;]</p>
The post <a href="https://learncgames.com/amazing-multi-platform-asteroids-in-c/">Amazing multi-platform Asteroids in C#</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:199,&quot;href&quot;:&quot;https:\/\/github.com\/aesalazar\/AsteroidsWasm&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260114025816\/https:\/\/github.com\/aesalazar\/AsteroidsWasm&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:44:14&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-10 10:18:55&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-15 19:42:41&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-19 19:32:53&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-24 02:11:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-28 13:36:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-06 14:36:43&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-12 03:15:14&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-15 12:44:28&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-25 21:24:22&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-31 16:01:55&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-05 03:51:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 00:40:55&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 00:41:44&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-16 23:23:21&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-21 01:38:43&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 01:38:43&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:200,&quot;href&quot;:&quot;https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/graphics\/skiasharp\/#:~:text=SkiaSharp%20is%20a%202D%20graphics,graphics%2C%20bitmaps%2C%20and%20text.&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20220904010537\/https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/graphics\/skiasharp\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 12:44:16&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-02-06 12:44:16&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-2609" src="https://learncgames.com/wp-content/uploads/2021/02/android-asteroids.png" alt="Android asteroids" width="395" height="838" srcset="https://learncgames.com/wp-content/uploads/2021/02/android-asteroids.png 395w, https://learncgames.com/wp-content/uploads/2021/02/android-asteroids-141x300.png 141w" sizes="auto, (max-width: 395px) 100vw, 395px" />Asteroids was the first full arcade game I ever wrote in C. <a title="Link to C# Asteroids on GitHub" href="https://github.com/aesalazar/AsteroidsWasm" target="_blank" rel="nofollow noopener">Asteroids in C#</a> takes things to a whole new level.  The solution contains 12 projects in all: Three Blazor projects, a WinForms version, a WPF version, a UWP (<em>Universal Windows Platform</em>) and a Xamarin Android Forms version (shown).</p>
<p>You can compile and run any of the projects though you will need to install and setup a suitable SDK and emulated (<em>or a real device</em>) for the Android.</p>
<p>Written by Howard Uman and ported by Ernie Salazar, this is a wireframe asteroids, more true to the original than my own raster version. Out of curiosity, I created an Android 9.0 emulator (<em>I don&#8217;t have a recent Android phone)</em> and compiled then deployed it to the emulator. The screenshot is grabbed directly from the emulator which has a less than ideal screen ratio. This would work better on a tablet.</p>
<p>The structure of the C# Solution is interesting. All of the game code is in the Base project. All of the other platforms just host the main game window. The game uses the <a title="Link to SkiaSharp documentation" href="https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/#:~:text=SkiaSharp%20is%20a%202D%20graphics,graphics%2C%20bitmaps%2C%20and%20text." target="_blank" rel="nofollow noopener">SkiaSharp</a> graphics framework for Android Forms.</p>
<p>This is a very nice open source project and an excellent way to see how Blazor works in both Wasm and Server mode, not to mention the Android, WinForms/WPF and UWP versions.</p>
<p>I have an interest in Blazor which lets you write C# code that runs in the browser very easily.  With a bit of workj, this should be runnable on a Linux webserver as well. Something for me to try&#8230;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>The post <a href="https://learncgames.com/amazing-multi-platform-asteroids-in-c/">Amazing multi-platform Asteroids in C#</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2608</post-id>	</item>
		<item>
		<title>Thinking about my Inselkampf reimagination</title>
		<link>https://learncgames.com/thinking-about-my-inselkampf-reimagination/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=thinking-about-my-inselkampf-reimagination</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Tue, 26 Jan 2021 00:00:37 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[inselkampf]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2515</guid>

					<description><![CDATA[<p>In an earlier post on web games, I mentioned an old multi-player web game that I used to play and which was discontinued in 2014.  I have a rough design for this and am busy learning Blazor as I believe that would be the best technology to use. It lets you run C# programs in [&#8230;]</p>
The post <a href="https://learncgames.com/thinking-about-my-inselkampf-reimagination/">Thinking about my Inselkampf reimagination</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:228,&quot;href&quot;:&quot;https:\/\/pixabay.com\/users\/mcmurryjulie-2375405\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1895779&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:229,&quot;href&quot;:&quot;https:\/\/pixabay.com\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1895779&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260205102120\/https:\/\/pixabay.com\/?utm_source=link-attribution&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:01:38&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-10 08:53:53&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-18 18:15:27&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-22 19:10:08&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-26 16:37:00&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-02 15:02:27&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-06 14:36:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-11 18:12:46&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-15 08:05:07&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-19 10:08:39&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-03 02:34:48&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-07 22:43:28&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-11 17:06:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-15 14:37:55&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-18 16:50:02&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 16:50:02&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:230,&quot;href&quot;:&quot;https:\/\/mariadb.org&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260205003404\/https:\/\/mariadb.org\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:01:41&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 08:53:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-18 18:15:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-22 19:10:09&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-26 16:37:01&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-02 15:02:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 16:46:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 18:12:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-15 08:05:09&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-19 10:08:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 06:15:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 02:34:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 22:43:29&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-11 17:06:54&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-15 14:37:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-18 16:50:03&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 16:50:03&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:231,&quot;href&quot;:&quot;https:\/\/torn.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251201141527\/https:\/\/www.torn.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:01:45&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-02-10 08:53:54&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-18 18:15:27&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-21 20:24:43&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-25 01:35:24&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-28 12:51:51&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-04 16:00:19&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-08 10:32:04&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-11 18:12:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-15 08:05:07&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-18 19:31:53&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-03 02:34:46&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-07 22:43:27&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-11 17:06:53&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-15 14:37:55&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-18 16:50:04&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 16:50:04&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;}]'></div>
<figure id="attachment_2516" aria-describedby="caption-attachment-2516" style="width: 300px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="size-medium wp-image-2516" src="https://learncgames.com/wp-content/uploads/2021/01/database-schema-1895779_640-300x262.png" alt="Database schema" width="300" height="262" srcset="https://learncgames.com/wp-content/uploads/2021/01/database-schema-1895779_640-300x262.png 300w, https://learncgames.com/wp-content/uploads/2021/01/database-schema-1895779_640.png 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-2516" class="wp-caption-text">Image by <a href="https://pixabay.com/users/mcmurryjulie-2375405/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1895779">mcmurryjulie</a> from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1895779">Pixabay</a></figcaption></figure>
<p>In an earlier post on <a title="Link to blog post on web games" href="https://learncgames.com/i-like-web-games/" target="_blank" rel="nofollow noopener">web games</a>, I mentioned an old multi-player web game that I used to play and which was discontinued in 2014.  I have a rough design for this and am busy learning Blazor as I believe that would be the best technology to use. It lets you run C# programs in the browser, no JavaScript needed. This simplifies input with verification and also updating the web page without having to do lots of messy Ajax stuff.</p>
<p>But being a web game there is a web server involved and the big question is what sort of data architecture to use? The most obvious one is probably using a relational database behind the scenes. That way each game (<em>with up to 1,000 players</em>) is held in a single database in about 12 tables. I&#8217;ll probably use <a title="Link to MariaDb.org" href="https://mariadb.org/" target="_blank" rel="nofollow noopener">MariaDB</a>.</p>
<p>I did consider doing everything in RAM but its a terrible abuse of a web server and rather restricts it to running one or two games. Pulling stuff out of a database is much less strain on the system than having a few hundred MB of RAM tied up per game. A web server can support multiple games which helps keep the costs down.</p>
<p>Also with a web game, it raises the possibility of caching certain static files on disk to improve throughput.  This blog uses WordPress but has a cache so when you view a page, it&#8217;s almost certainly been pre-generated rather than built on the fly.</p>
<p>An example of a web game that I admire is <a title="Link to Torn.com" href="https://torn.com" target="_blank" rel="nofollow noopener">Torn.com</a>.</p>The post <a href="https://learncgames.com/thinking-about-my-inselkampf-reimagination/">Thinking about my Inselkampf reimagination</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2515</post-id>	</item>
		<item>
		<title>I like web games</title>
		<link>https://learncgames.com/i-like-web-games/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=i-like-web-games</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Tue, 22 Dec 2020 10:13:04 +0000</pubDate>
				<category><![CDATA[Blazor]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Illyriad]]></category>
		<category><![CDATA[inselkampf]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=2125</guid>

					<description><![CDATA[<p>Not the Flash type games you get on sites like Kongregate but strategy games like Illyriad, (Pictured) Though you can waste an awful lot of time playing them. The web is an excellent platform for certain of multiplayer games. Heck you can even play games like Quake III which was a desktop game but redone [&#8230;]</p>
The post <a href="https://learncgames.com/i-like-web-games/">I like web games</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:308,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Illyriad&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251025220648\/https:\/\/en.wikipedia.org\/wiki\/Illyriad&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:43:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 08:53:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-17 13:17:21&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 01:35:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 10:02:23&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-03-05 15:05:09&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 18:12:51&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 11:18:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 06:15:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-02 23:47:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 22:43:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-11 09:12:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-15 20:16:25&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-04-20 11:11:54&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 11:11:54&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:309,&quot;href&quot;:&quot;http:\/\/www.quakejs.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260204011702\/https:\/\/www.quakejs.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:44:01&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 08:53:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-17 13:17:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 01:35:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 10:02:24&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-05 15:05:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 18:12:56&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 11:18:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 06:15:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 10:42:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 22:43:30&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-11 09:12:32&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-15 20:16:25&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-20 11:11:51&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 11:11:51&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:310,&quot;href&quot;:&quot;https:\/\/roope.proboards.com\/thread\/3806\/inselkampf-rules&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20221201103120\/https:\/\/roope.proboards.com\/thread\/3806\/inselkampf-rules&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:44:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 08:53:54&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-17 13:17:20&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 01:35:25&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 10:02:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-05 15:05:09&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-13 08:13:51&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 11:18:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-24 15:53:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 06:15:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 10:35:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 22:43:29&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-11 09:12:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-15 20:16:27&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-20 11:11:56&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 11:11:56&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:311,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Torn_(online_text_game)&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20250909114410\/https:\/\/en.wikipedia.org\/wiki\/Torn_(online_text_game)&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 13:44:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 08:53:54&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-17 13:17:21&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 01:35:25&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 10:02:23&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-03-05 15:05:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 18:12:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 11:18:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-24 15:53:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 06:15:52&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-04-02 23:47:20&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 22:43:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-11 09:12:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-15 20:16:29&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-04-20 11:12:00&quot;,&quot;http_code&quot;:429}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 11:12:00&quot;,&quot;http_code&quot;:429},&quot;process&quot;:&quot;done&quot;}]'></div>
<p><img loading="lazy" decoding="async" class="alignleft size-medium wp-image-2126" src="https://learncgames.com/wp-content/uploads/2020/12/illyriad-300x170.png" alt="Illyriad" width="300" height="170" srcset="https://learncgames.com/wp-content/uploads/2020/12/illyriad-300x170.png 300w, https://learncgames.com/wp-content/uploads/2020/12/illyriad.png 598w" sizes="auto, (max-width: 300px) 100vw, 300px" />Not the Flash type games you get on sites like Kongregate but strategy games like <a title="Link to Wikipedia about Illyriad" href="https://en.wikipedia.org/wiki/Illyriad" target="_blank" rel="nofollow noopener">Illyriad</a>, (<em>Pictured</em>) Though you can waste an awful lot of time playing them. The web is an excellent platform for certain of multiplayer games. Heck you can even play games like <a title="Link to Quake 3 online" href="http://www.quakejs.com/" target="_blank" rel="nofollow noopener">Quake III</a> which was a desktop game but redone using WebAssembly.</p>
<p>I used to play a strategy game Inselkampf (<em>German for Island war</em>) where you start off with one island and improve it then you can start building ships and invading other islands. I remember getting to the point where I was managing an empire of 80 islands and the only way I could do track all the details was with an Excel spreadsheet. But it was a big time hog, taking up over and hour and a half each day (just mad!) and I stopped playing.</p>
<p>It seems to have closed down a few years ago which is a shame as it was very popular in the mid 2000s. The UK website inselkampf.co.uk just has a start Game Over message on it! Searching about I even found a copy of the <a title="Link to copy of the Inselkampf rules" href="https://roope.proboards.com/thread/3806/inselkampf-rules" target="_blank" rel="nofollow noopener">Inselkampf</a> rules online.</p>
<p>Given my postal games background (<em>I created three Play by Mail games back in the late 80s, two of which are still run today on kjcgames.com.</em> ) I still have an inkling to create a big web or mobile playable game. I&#8217;m not saying I&#8217;ll make a £million like <a title="Link to Wikipedia on Torn.com" href="https://en.wikipedia.org/wiki/Torn_(online_text_game)" target="_blank" rel="nofollow noopener">torn.com. </a> I&#8217;m not a great fan of web development (well the JavaScript part of it) but I&#8217;m currently studying a Udemy course on Blazor which is Microsoft&#8217;s take on C# and WebAssembly.  This lets you create websites in C# running in the browser. And C# I am most definitely a fan of.</p>
<p>&nbsp;</p>The post <a href="https://learncgames.com/i-like-web-games/">I like web games</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2125</post-id>	</item>
	</channel>
</rss>
