Difference between revisions of "Intermediate C++ Game Programming Tutorial 7"

From Chilipedia
Jump to: navigation, search
(Created page with "We finally ditch our janky makeshift chili:: routines and use some real shit here. Standard streams (std::cin / std::cout / std::fstream) are covered, and then we talk about s...")
 
(Homework)
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
We finally ditch our janky makeshift chili:: routines and use some real shit here. Standard streams (std::cin / std::cout / std::fstream) are covered, and then we talk about string manipulation with std::string.
+
We finally ditch our janky makeshift <code>chili::</code> routines and use some real shit here. Standard streams (<code>std::cin</code> / <code>std::cout</code> / <code>std::fstream</code>) are covered, and then we talk about string manipulation with <code>std::string</code>. We'll also cover some other less well-known dank C++ code memes, so check it out. Note that this video is more of an overview / whirlwind tour; it introduces various techniques and gives examples, but don't expect a detailed or exhaustive treatment here.
  
 
== Topics Covered ==
 
== Topics Covered ==
* RAII (Resource Allocation Is Initialization)
+
* C++ Streams
* Deep Copy vs. Shallow Copy
+
* <code>std::cin</code> / <code>std::cout</code>
* Rule of 3 / Rule of 0
+
* Insertion <code><<</code> / extraction <code>>></code> operators
* Destructors
+
* <code>std::endl</code> and buffered I/O flushing
* Special Member Functions
+
* <code>&lt;iomanip&gt;</code>
* Converting Constructors
+
* Cleaning an input stream with <code>ignore()</code> and <code>clear()</code>
* <code>explicit</code> Keyword for Constructors
+
* <code>std::numeric_limits<></code>
* Copy Construction with Assignment operator <code>=</code>
+
* <code>std::string</code>
* Constructing with <code>()</code> vs. with <code>{}</code>
+
* <code>OutputDebugString()</code>
* Deleting Special Member Functions with <code>= delete</code>
+
* <code>std::stringstream</code>
* Conditions when Special Members Cannot be Generated by Compiler
+
 
+
  
 
== Video Timestamp Index ==
 
== Video Timestamp Index ==
* [https://youtu.be/OwDJGrV3pgM Video Start]
+
[https://youtu.be/EIzkeFTpMq0 Tutorial 7]
* [https://youtu.be/OwDJGrV3pgM?t=2m36s Announcing Member Functions]
+
* [https://youtu.be/OwDJGrV3pgM?t=3m33s Destructors]
+
* [https://youtu.be/OwDJGrV3pgM?t=8m26s RAII]
+
* [https://youtu.be/OwDJGrV3pgM?t=10m00s Special Member Functions]
+
* [https://youtu.be/OwDJGrV3pgM?t=11m09s Default Constructors]
+
* [https://youtu.be/OwDJGrV3pgM?t=12m04s Conditions when Default Ctor not Defined]
+
* [https://youtu.be/OwDJGrV3pgM?t=12m40s Conditions when Default Ctor Impossible for Compiler to Generate]
+
* [https://youtu.be/OwDJGrV3pgM?t=15m10s Copy Constructors]
+
* [https://youtu.be/OwDJGrV3pgM?t=18m51s Copy Assignment Operators]
+
* [https://youtu.be/OwDJGrV3pgM?t=19m41s Conditions when Copy Ctor Impossible for Compiler to Generate]
+
* [https://youtu.be/OwDJGrV3pgM?t=23m26s Copy Constructing with <code>=</code>]
+
* [https://youtu.be/OwDJGrV3pgM?t=24m57s Converting Constructors]
+
* [https://youtu.be/OwDJGrV3pgM?t=26m13s <code>explicit</code> Constructors]
+
* [https://youtu.be/OwDJGrV3pgM?t=27m08s Calling Constructors with <code>()</code> vs. <code>{}</code>]
+
* [https://youtu.be/OwDJGrV3pgM?t=28m38s Example of a Class that Manages a Resource]
+
* [https://youtu.be/OwDJGrV3pgM?t=30m16s Problem with Using Compiler-Generated Copy Ctor (Shallow Copy Problem)]
+
* [https://youtu.be/OwDJGrV3pgM?t=34m52s Deep Copy Constructor]
+
* [https://youtu.be/OwDJGrV3pgM?t=38m52s Problem with Using Compiler-Generated Copy Assign (Shallow Copy Problem)]
+
* [https://youtu.be/OwDJGrV3pgM?t=40m02s Deep Copy Assign]
+
* [https://youtu.be/OwDJGrV3pgM?t=42m08s Rule of 3]
+
* [https://youtu.be/OwDJGrV3pgM?t=43m27s Rule of 0]
+
* [https://youtu.be/OwDJGrV3pgM?t=44m29s Calling Copy Assign from Copy Ctor]
+
* [https://youtu.be/OwDJGrV3pgM?t=45m36s Explicitly Deleting Special Functions]
+
* [https://youtu.be/OwDJGrV3pgM?t=47m15s Homework]
+
  
 
== Source Code ==
 
== Source Code ==
[https://github.com/planetchili/Memesweeper GitHub Repo for Memesweeper]<br />
+
[https://github.com/planetchili/Snek GitHub Repo for Snek]<br />
[https://github.com/planetchili/intlo GitHub Repo for Tutorial 6]<br />
+
 
[https://github.com/planetchili/LinkedListStack GitHub Repo for Homework (Stack)]
+
== Other Links ==
 +
[https://www.cppreference.com C++ Hardcore Reference]<br />
 +
[http://www.cplusplus.com C++ Softcore Reference]<br />
 +
[http://www.gutenberg.org/files/2600/2600-0.txt War and Peace (warp.txt)]
  
 
== Homework ==
 
== Homework ==
The homework is to create a stack container that is implemented with with a linked list data structure. The skeleton of the interface for the Stack class is given in the source code (see the Downloads above). These are the minimum functions that must be implemented. For further information on stacks, see [https://youtu.be/Cjx5C2I3UrA?t=9m53s this video]. For further information on linked lists, see [https://youtu.be/j1ZF__Ml5ds?t=20m10s this video]. Furthermore, additional research is highly recommended.
+
The homework is to modify Poison Snek so that various game settings can be configured by the user by editing a text file. The settings file should be parseable regardless of the order of the settings in the file. The following settings are recommended:
 
+
The behaviors of the interface functions are for the student to infer, with the exception of the Pop() function. In the case of calling Pop() on an empty stack, the function shall return -1. The internal implementation details are also to be determined by the student, but they must at their core use a linked list data structure.
+
 
+
When the Stack is fully implemented and the program is executed, there are 8 test routines that will be run. All test routines should output 'Passed' to the console for the homework to be considered solved. Furthermore, the heap memory will be monitored at the end of the program and any dynamic memory that has not been freed will trigger a diagnostic error message. It is required that no diagnostic error be output for the homework to be considered solved.
+
 
+
The string routines developed during Intermediate are available for use (but are not strictly necessary). The student may not modify any of the test code. The student may not use any additional classes/functions from the standard library or any 3rd party library. If necessary, it is recommended that the Stack class be developed in a separate solution and tested with custom testing code and diagnostic outputs. Then when the Stack class is deemed ready, it can be transplanted into the test solution for final validation.
+
  
== Errata ==
+
* Tile Size
The destructor of <code>DynamicIntArray</code> frees the dynamic memory block with <code>delete pArray</code>, but since it was allocated with <code>new int[]</code> it should have been freed with <code>delete [] pArray</code>.
+
* Board Size
 +
* Speedup Rate
 +
* Poison Amount
 +
* Food Amount
  
The text at 39:38 got messed up and goes off of the screen partially. It should have read: "Remember, before assignment the object being assigned to already owned some memory, and when we overwrite the pointer we lose track of that memory forever."
+
For this homework, you are not required to handle malformed input files, though you can attempt to handle those as a bonus challenge if you like.
  
 
== See also ==
 
== See also ==
 
* [[Intermediate C++ Game Programming Tutorial 8|Next in series (Tutorial 8)]]
 
* [[Intermediate C++ Game Programming Tutorial 8|Next in series (Tutorial 8)]]
 
* [[Intermediate C++ Game Programming Series]]
 
* [[Intermediate C++ Game Programming Series]]

Latest revision as of 17:35, 30 July 2017

We finally ditch our janky makeshift chili:: routines and use some real shit here. Standard streams (std::cin / std::cout / std::fstream) are covered, and then we talk about string manipulation with std::string. We'll also cover some other less well-known dank C++ code memes, so check it out. Note that this video is more of an overview / whirlwind tour; it introduces various techniques and gives examples, but don't expect a detailed or exhaustive treatment here.

Topics Covered

  • C++ Streams
  • std::cin / std::cout
  • Insertion << / extraction >> operators
  • std::endl and buffered I/O flushing
  • <iomanip>
  • Cleaning an input stream with ignore() and clear()
  • std::numeric_limits<>
  • std::string
  • OutputDebugString()
  • std::stringstream

Video Timestamp Index

Tutorial 7

Source Code

GitHub Repo for Snek

Other Links

C++ Hardcore Reference
C++ Softcore Reference
War and Peace (warp.txt)

Homework

The homework is to modify Poison Snek so that various game settings can be configured by the user by editing a text file. The settings file should be parseable regardless of the order of the settings in the file. The following settings are recommended:

  • Tile Size
  • Board Size
  • Speedup Rate
  • Poison Amount
  • Food Amount

For this homework, you are not required to handle malformed input files, though you can attempt to handle those as a bonus challenge if you like.

See also