|
Hi Griff.
In answer to your question.
The program is designed to not just play a certain adventure but to be able to load many compiled adventures. The person writes his adventure as a script file. The script file is compiled using the adventure compiler then the adventure driver loads the compiled adventure to play the came.
You need to know what room the player is in (current room) so yu can list the objects in that room and if the player tried to pick up an object then the condition is that the object has to be in the same room as the player (current room and Object Location is used to check for this.
Brian
|
|
|
|
|
That's why you have a Room class, and a Player class. Part of the Player Location is the Room he is in ...
You are thinking in a "C" language way, not an OOPs way - and that won't help you at all with C# apps. Start considering your game as composed of objects which "know" how to do things to themselves instead of trying to think of the "program" as being in charge and deciding what to do.
For example, a Player might have a WalkForward method, which internally finds the Room he is in, finds his location in the room, finds which way he is facing, and asks the Room to move one step in that direction. The Room checks if there is a wall in the way, or a pit full of Grues, or a heavy weight about to drop on that square and returns a result to the Player method which updates its location or takes damage. The Room doesn't care which player it is, the Player doesn't care which Room it is - they just use the data they have to work with any Room / Player combination.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi Griff.
I have come from a background of programming in Basic then Visual Basic, so I tend to slip into this type of programming.
I understand that the class method is a more modern way to program. It's just getting my head around classes even when reading about them.
Brian
|
|
|
|
|
And it shows!
Instead of trying to get your head round how C# and OOPs design works, you're trying to force the code into your older methodology - and that doesn't produce good code!
Modern software thinks in terms of objects and instances, just the same as you do in the "real world". You wouldn't create an array of all Cars and try to move them all relative to each other in the real world, you would create a CarPark with a collection of Levels, each of which would have a collection of ParkingSpaces - your Car instances would then park in a free ParkingSpace without any reference to where the other cars are parked because it's irrelevant - all you want to know is "is this space free", you don't care if it's Car[0], or Car[1], or Car[n] that is in the space, do you?
And that is exactly what you do in the real world: you enter the car park then drive through it looking for the first empty space. When you leave, you go to the level you parked on, then to the space (and hope your car is still there). You drive out of the car park, and you are in a different area: the high street, which connects to Millers Lane at one end and the Bypass at the other. So why would you care about Sesame Street, which is half way across town? The High St "knows" what it's connected to: CarPark, Millers Lane, Bypass. And so on. So the the whole topology of the town is arranged as a series of connected places: Sesame St, Bypass, Millers Lane, High Street, etc. - they only need to know what they are connected to because that "lays out" how the town is arranged.
Think about it, read the books - and this time don't skip stuff because "I know this from Basic" but try and get your head around how Object Oriented Programming helps you to reflect the real world more easily!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I have some registry values:
[HKEY_CLASSES_ROOT\WinZip\Shell\Unzip_Model]@="Unzip Model"
[HKEY_CLASSES_ROOT\WinZip\Shell\Unzip_Model\command]@="\"D:\TeklaZipping\TeklaZipping.exe\" \"%1\" "
I am trying to read the value prior to correcting it if wrong:
RegistryKey UnZipping = Registry.ClassesRoot.OpenSubKey(@"WinZip\Shell\Unzip_Model");
if (UnZipping != null)
{
whattodo = UnZipping.GetValue("command").ToString();
UnZipping.Close();
}
the line
whattodo = UnZipping.GetValue("command").ToString();
always gives an error System.NullReferenceException. "Object reference not set to an instance of an object."
I've tried with "(Default)" instead of "command" and various other possibilities but get the same error. Clearly there is something here I don;t understand, can anyone help?
|
|
|
|
|
This might be relevant?
Basically there are 2 registry databases. a 64 bit and 32 bit one. Kind of messed up.... But workable!
|
|
|
|
|
This is one of the most common problems we get asked, and it's also the one we are least equipped to answer, but you are most equipped to answer yourself.
Let me just explain what the error means: You have tried to use a variable, property, or a method return value but it contains null - which means that there is no instance of a class in the variable.
It's a bit like a pocket: you have a pocket in your shirt, which you use to hold a pen. If you reach into the pocket and find there isn't a pen there, you can't sign your name on a piece of paper - and you will get very funny looks if you try! The empty pocket is giving you a null value (no pen here!) so you can't do anything that you would normally do once you retrieved your pen. Why is it empty? That's the question - it may be that you forgot to pick up your pen when you left the house this morning, or possibly you left the pen in the pocket of yesterdays shirt when you took it off last night.
We can't tell, because we weren't there, and even more importantly, we can't even see your shirt, much less what is in the pocket!
Back to computers, and you have done the same thing, somehow - and we can't see your code, much less run it and find out what contains null when it shouldn't.
But you can - and Visual Studio will help you here. Run your program in the debugger and when it fails, VS will show you the line it found the problem on. You can then start looking at the various parts of it to see what value is null and start looking back through your code to find out why. So put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, VS will stop before the error, and let you examine what is going on by stepping through the code looking at your values.
But we can't do that - we don't have your code, we don't know how to use it if we did have it, we don't have your data. So try it - and see how much information you can find out!
But even then, I'd strongly advise against using the registry unless you really have to: access to it is restricted and becoming more so with each version of Windows. (Mostly because it was abused a lot when it was first released, leading to some truly horrendous file sizes and damage.) If possible, store your info somewhere else: a config file or similar is a good idea.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
Working with ASP.NET Core and OData v4
I get a
Quote:
InvalidOperationException: The path template 'Classes({key})/Bookings({bookingKey})' on the action 'GetBooking' in controller 'Classes' is not a valid OData path template. Bad Request - Error in query syntax.
I don't see the error in query syntax. Here is the full code of this method in my controller 'Classes'
[HttpGet]
[ODataRoute("Classes({key})/Bookings({bookingKey})")]
public async Task<IActionResult> GetBooking([FromODataUri] Guid key, [FromODataUri] Guid bookingKey)
{
var @class = await _context.Classes.FirstOrDefaultAsync(y => y.Id == key);
if (@class == null)
{
return NotFound();
}
var booking = _context.Bookings.Where(y => y.Class.Id == key && y.Id == bookingKey);
if (!booking.Any())
{
return NotFound();
}
return Ok(SingleResult.Create(booking));
}
This method is defined in 'Classes' Controller. I also have a GeBookings method and 2 actions methods defined that cause no issue. When I comment my GetBooking() method I don't have any error.
Booking is a [Contained] ICollection of Booking
public class Class
{
[Key]
public Guid Id { get; set; }
[Contained]
public ICollection<Booking> Bookings {get; set;}
}
Maybe I need to do a pause but I really cannot see my error. Were should I look?
Bastien
|
|
|
|
|
Asking for trouble:
public class Class
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
C# is not case-sensitive.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
It gets fun if you try and consume it in a language like VB.NET though.
This space for rent
|
|
|
|
|
Pete O'Hanlon wrote: It gets fun if you try and consume it in a language like VB.NET though. Not really, there's a special syntax to use those.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
|
I meant that C# nicely distinguishes between a classname with uppercase and lowercase. "Class" is not treated as "class".
Not sure if that is sensitive of insensitive.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Yes, C# is case sensitive. That is it is sensitive to the difference between class and Class. If it was insensitive then it would be happy with cLAss, CLAss, clAsS, or any variation thereof, and take them all to mean the same as class .
|
|
|
|
|
You're right, of course
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
The point was: a meaningless name that looks like a key word.
It's "confusing" (for the already confused); as indicated by this thread.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Looks like you are reusing web api routes and have not enabled custom routing for OData. Can you share the code where you define the routing? Right now, it is assuming Classes to be name of a controller which of course is not the case.
"It is easy to decipher extraterrestrial signals after deciphering Javascript and VB6 themselves.", ISanti[ ^]
|
|
|
|
|
All my other routes are working fine. GelAll is working, Post is working. I don't get it. Controller name is Classes. Only route that include the key of Booking are not working. What is the logic behind this?
using Microsoft.AspNet.OData;
using Microsoft.AspNet.OData.Routing;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Oyg.Domain.DataTypes;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace Oyg.Api.Controllers
{
public partial class ClassesController : ODataController
{
[HttpGet]
[ODataRoute("Classes({classId})/Bookings")]
public async Task<IActionResult> GetBookings([FromODataUri] Guid classId)
{
return Ok(await _context.Bookings
.Where(y => y.Class.Id == classId)
.ToListAsync());
}
[HttpGet]
[ODataRoute("Classes({classId})/Bookings({bookingId})")]
public async Task<IActionResult> GetBooking([FromODataUri] Guid classId, [FromODataUri] Guid bookingId)
{
var @class = await _context.Classes.FirstOrDefaultAsync(y => y.Id == classId);
if (@class == null)
{
return NotFound();
}
var booking = _context.Bookings.Where(y => y.Class.Id == classId && y.Id == bookingId);
if (!booking.Any())
{
return NotFound();
}
return Ok(SingleResult.Create(booking));
}
[HttpPost]
[ODataRoute("Classes({classKey})/Bookings")]
public async Task<IActionResult> PostBooking([FromODataUri] Guid classKey, [FromBody] Booking booking)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var @class = _context.Classes
.FindAsync(classKey);
if (@class == null)
{
return NotFound();
}
booking.Id = Guid.NewGuid();
booking.Position = _context.Bookings.Where(y => y.Class.Id == classKey).Count();
booking.ReservationTime = DateTime.UtcNow;
_context.Bookings.Add(booking);
await _context.SaveChangesAsync();
return Created(booking);
}
[HttpPost]
[ODataRoute("Classes({classKey})/Oyg.Actions.Register")]
public async Task<IActionResult> Register([FromODataUri] Guid classKey, ODataActionParameters parameters)
{
var @class = await _context.Classes.FindAsync(classKey);
if (@class == null)
{
return NotFound();
}
if (!parameters.TryGetValue("studentId", out object outputFromDictionary))
{
return NotFound();
}
if (!Guid.TryParse(outputFromDictionary.ToString(), out Guid studentId))
{
return NotFound();
}
var student = await _context.Students.FirstOrDefaultAsync(y => y.Id == studentId);
if (student == null)
{
return NotFound();
}
var booking = new Booking()
{
Id = Guid.NewGuid(),
Class = @class,
Student = student,
Position = _context.Bookings.Where(y => y.Class.Id == classKey).Count(),
ReservationTime = DateTime.UtcNow
};
_context.Bookings.Add(booking);
await _context.SaveChangesAsync();
return Ok(booking);
}
[HttpPost]
[ODataRoute("Classes({classKey})/Oyg.Actions.CancelRegistration")]
public async Task<IActionResult> CancelRegistration([FromODataUri] int classKey, ODataActionParameters parameters)
{
var @class = await _context.Classes.FindAsync(classKey);
if (@class == null)
{
return NotFound();
}
if (!parameters.TryGetValue("studentId", out object outputFromDictionary))
{
return NotFound();
}
if (!Guid.TryParse(outputFromDictionary.ToString(), out Guid studentId))
{
return NotFound();
}
var student = _context.Students.FirstOrDefault(y => y.Id == studentId);
if (student == null)
{
return NotFound();
}
var booking = await _context.Bookings.SingleOrDefaultAsync(y => y.Class.Id == @class.Id &&
y.Student.Id == student.Id && y.CancelTime == null);
if (booking == null)
{
return NotFound();
}
booking.CancelTime = DateTime.UtcNow;
await _context.SaveChangesAsync();
return NoContent();
}
}
}
|
|
|
|
|
Suppose I have a timekeeper, Ronald jack x628-C, I export time attendance data from the device, including two files: data.dat and device.dat because the old machine runs or crashes the device, I buy the device again If I restore the fingerprint from the old device, I added the remaining device.dat file, which was reported: "IP Error Input!" Restore the data to the device, and the data must be the backup BIN data passing the backup function before. Any of you know this error only helps with.
|
|
|
|
|
What does this have to do with C#? If you are having a problem with a piece of hardware or how it's configured, you should get in touch with the support department of the manufacturer. They are going to be much more capable of providing useful help than we are.
This space for rent
|
|
|
|
|
I look for example backup and restore code written in winform C#, do you have this example shared with
|
|
|
|
|
Why would you assume that a random website would know more about a specific piece of hardware and it's software interface than the people who made it?
Go talk to the manufacturers - they are the only ones who you can guarantee will know what you are talking about in any detail!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You should talk to the people who created it - they should provide technical support and will know more about their product than we will. If they don't, then find another supplier and demand your money back!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|