

I even retyped my code but the pygame window closes immediately. There is no error displayed in the terminal and I have also added loop as I saw in the past questions on stack overflow. Is there any solution to this problem? I use the community version of Visual Studio 2019. # when the snake hits the food it's length increases by 1 If x1 >= display_width or x1 = display_height or y1 Length_of_snake: Value = core_fnt.render("Your score: " + str(score), True, greenclor)ĭis.blit(value, ) (dis,greencolor, x,snake_block, snake_block])įoodx = round(random.roundrange(0, display_width - snake_block) / 10)* 10įoody = round(random.roundrange(0, display_height - snake_block) / 10)* 10 # Defines the snake's structure and position

If (Application.# Declare the colors using their RBG colorsĭis = _mode((display_width, display_height)) If (GetMessage(out message, IntPtr.Zero, 0, 0) = -1) NativeMessage message = new NativeMessage() Public static extern int DispatchMessage(ref NativeMessage lpMsg) Public static extern int TranslateMessage(ref NativeMessage lpMsg) Public static extern int GetMessage(out NativeMessage lpMsg, IntPtr hWnd, int wMsgFilterMin, int wMsgFilterMax) Public static extern int PeekMessage(out NativeMessage lpMsg, IntPtr hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg) You can also create a message looper, which peeks the pending messages from the system and processes each of them before passing to the next iteration, as follows: Why isn't this overloading CPU? You can look at the source code here anyway, it basically waits some CPU cycle before iterating over. This also works perfectly, and it basically consists of a while loop with a negated condition that is returned by the above lambda method. In order to avoid to add reference, you can use a simple trick, the so-called spin waiting, importing System.Threading: SpinWait.SpinUntil(() => false) This doesn't leak CPU and works successfully. However, it'll cause the CPU to overload, as it's therefore forced to iterate infinitely.Īt this point, you can opt to use class (but it requires you to add reference): Application.Run() The below example is the simplest one, to be put at the end of your program: while (true) If you want to keep your application opened, you have to do something in order to keep its process alive. To do that you can put the Console.ReadLine() in a finally block: #if DEBUG You might also want the window to stay open if an uncaught exception was thrown. Something like: #if DEBUGĬonsole.WriteLine("Press enter to close.") The best compromise is probably to call the Console.ReadLine method only when debugging the application by wrapping it in a preprocessor directive.

Adding this line to the end of your code (just before the return statement) will cause the application to wait for you to press a key before exiting.Īlternatively, you could start the application without the debugger attached by pressing Ctrl+ F5 from within the Visual Studio environment, but this has the obvious disadvantage of preventing you from using the debugging features, which you probably want at your disposal when writing an application. The Console.ReadLine method is one way of doing that. If you want to keep it open for debugging purposes, you'll need to instruct the computer to wait for a key press before ending the app and closing the window. When console applications have completed executing and return from their main method, the associated console window automatically closes. The issue here is that their Hello World Program is showing up then it would immediately close.īecause it's finished.
