> For the complete documentation index, see [llms.txt](https://kdoore.gitbook.io/cs2335/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kdoore.gitbook.io/cs2335/master.md).

# Introduction

This book will provide supplemental instructional resources for CS-2335: Computer Science 2 for Non-Majors

## WHY Learn about Programming for Modeling Systems with C# and Unity?

Read this article: [Brenda Romero's guide to becoming a game designer](https://www.gamesindustry.biz/articles/2019-04-09-brenda-romeros-guide-to-becoming-a-game-designer)

> **Rule #1: "Be nice to programmers**," ... "Be very, very nice. Because at the end of the day, the programmer is going to be the one getting your feature in that you're really, really hoping will stay in. And they will remember all that currency you built up when you were irritated with them or anything else, **so always treat programmers with the utmost respect.**
>
> Romero stressed that game design is not about simply writing a rulebook about how to jump or carry out other actions. Instead, **designers have to "teach people how to play through the process of play".** **Rule: "Start making games"** "Don't wait to get to college, just start making games. Now, notice there's no adjective there -- **it doesn't have to be a good game.** It could be a terrible game, in fact it can be an abysmal failure." [Brenda Romero](https://www.gamesindustry.biz/articles/2019-04-09-brenda-romeros-guide-to-becoming-a-game-designer)

## Life as Adventure : Death as a Feature

{% embed url="<https://www.newyorker.com/culture/persons-of-interest/hidetaka-miyazaki-sees-death-as-a-feature-not-a-bug>" %}

> For Miyazaki, video-game death is an opportunity to create a memory, or a punch line. “When I’m playing these games, I think, This is the way *I’d* want to die—in a way that is amusing or interesting, or that creates a story I can share,” he said. “**Death and rebirth, trying and overcoming—we want that cycle to be enjoyable. In life, death is a horrible thing. In play, it can be something else.**”

> In Dark Souls, **a crucial plot detail is more likely to be found in the description of an item in your inventory than in dialogue.** It’s a technique Miyazaki employs to spark players’ imaginations, in the same way that he extracted stories from illustrated fantasy books as a child. “**That power of imagination is important to me,**” he said. “**Offering room for user interpretation creates a sense of communication with the audience—and, of course, communication between users in the community.** This is something that I enjoy seeing unfold with our games, and that has continued to influence my work.”

> There’s a paradox in Miyazaki’s yearning for boundaries between his work and his world. Games are composed of fictional challenges, which often seem trite and distant compared with those of daily existence. But **Miyazaki’s achievement has been to narrow the gap between them. By rooting games in the human experience—in shame, in failure, and even in death—he has brought them closer to life.**

##

## Course Overview: Program a simple Adventure-Game.

[UTD Mercury Article: Choose your adventure: Spring 19:](<https://utdmercury.com/choose-your-adventure/ >)

**Learn: C# OOP-Programming, Object-Oriented Design, System-Modeling (game-systems), Programming Patterns, UML Modeling Language, using Unity Game Engine.**&#x20;

This course aims to enhance your ability to **Communicate Game-Experience Ideas, Concepts** with programmers and others. This course teaches **Computational Systems and Patterns** used in programming games by taking a deep dive into the fundamental building blocks of the concepts of game-systems. **Game are Event-Driven Systems**. The art/science of **Designing Computational-Systems** falls within the domain of '**Modeling and Simulation**', which is a core of Computer Science. This course introduces **Computational Languages, Programming Patterns, System-Modeling, and UML**, a Visual Language to convey these concepts. This course teaches how to program a **Simple Adventure Game**, using **C#** and Unity Game Engine.

This course aims to teach **Computational Languages** used to create games. These languages include **C# OOP-programming, State-Machines, Programming Patterns, and the 'Unified Modeling Language' (UML)** *which is a visual language.* In this course, 'Computing Languages' are used to design and implement **Game-System Concepts**. Each Student creates a **Branching-Narrative Adventure Game** where **'designed-interactions'** determine the player's path through the game. Students build **Finite-State Machines (FSM)**, to control scene-transitions, animate the player-character, etc. Students will learn the **Component Pattern**(used by Unity) and the **Singleton Pattern** for various game-control systems. Custom GameObject-Behaviors and game-systems (Dialog, Inventory, Animation) and are programmed using C#. The **Observer Pattern (Publish / Subscribe)** is used when coding custom **Events** for decoupled object-messaging. Code for an **Inventory-system** uses **Abstract, Static Classes and Methods, Virtual,Override Methods, Interfaces, Enums, C# Generics, Data-structures:** `List<T>`, and \`Dictionary .

### **C#**

[MSDN C# Programming Guide:](https://msdn.microsoft.com/en-us/library/67ef8sbd.aspx)

[MSDN C# Language Reference:](https://msdn.microsoft.com/en-us/library/618ayhy6.aspx)

Rob Miles has an excellent book: [C# Yellow Book](http://www.robmiles.com/c-yellow-book/), which is available as a free-download: pdf-format.

For a comparison between programming languages: Java and C#, see this [MSDN reference](https://msdn.microsoft.com/en-us/library/ms836794.aspx):

### **Unity**

[Unity3D Game Engine](https://unity3d.com/)

[Learn Unity:](http://unity3d.com/learn)

* [Unity Documentation](http://docs.unity3d.com/Manual/index.html)
* [Unity Tutorials](http://unity3d.com/learn/tutorials)
* [Unity Scripting Tutorials](https://unity3d.com/learn/tutorials/topics/scripting)

[Unity Community Wiki: Tutorials](http://wiki.unity3d.com/index.php/Tutorials)

[Unity Community Wiki: Programming, C# Tutorial](http://wiki.unity3d.com/index.php/CSharp_Unity_Tutorial)

[Unity Hot Keys:](https://docs.unity3d.com/Manual/UnityHotkeys.html)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kdoore.gitbook.io/cs2335/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
