Computer Science

Degrees and Certificates

Courses

CS 100: Computer Environment

Credits 4
This course provides a detailed examination of the fundamental elements on which computers are based. Topics include number systems and computation, electricity and basic circuits, logic circuits, memory, computer architecture, and operating systems. Operational code and assembly languages are discussed and then implemented on a hardware platform, such as a personal computer or an autonomous vehicle.

CS 115: Introduction to Scripting and Programming

Credits 3
This course introduces programming environments to students who are not experienced programmers. This course covers simple logic, programming flow, and the use of variables.n It introduces students to the history of programming and the basic vocabulary of the programming industry. The course culminates in a series of hands-on exercises using this knowledge to solve problems. At his or her discretion, the instructor may cover special topics in programming or scripting.

CS 120: High-Level Programming I: The C Programming Language

Credits 4
This course serves as a foundation for all high-level programming courses and projects by introducing control flow through statement grouping, decision making, case selection, and procedure iteration as well as basic data types. Additionally, this course addresses the lexical convention, syntax notation, and semantics of the C programming language.

CS 170: High-Level Programming II: The C++ Programming Language

Credits 4
This course introduces the C++ language with particular emphasis on its object-oriented features. Topics include stylistic and usage differences between C and C++, namespaces, function and operator overloading, classes, inheritance, templates, and fundamental STL components.

CS 180: Operating Systems I: Man-Machine Interface

Credits 3
This course presents an overview of modern operating systems as implemented on personal computers. It presents an overview of what an operating system is and does, with emphasis on the following topics: organization and design, process management, threading, interprocess communication, process synchronization, and memory management.

CS 200: Computer Graphics I

Credits 3
This course presents fundamental mathematical elements, data structures, and algorithms useful for animating and viewing 2D primitives. The course aims to fulfill two objectives. The first objective is to provide students with a sufficient mathematical and algorithmic background to design and implement 2D graphics applications. The second objective is to prepare students with the knowledge required for writing 3D graphics applications. The first half of the course deals with scan-conversion algorithms for rasterizing 2D primitives such as lines, circles, ellipses, triangles, and arbitrary polygons. The second half of the course is concerned with the viewing and animation of these 2D primitives. The course covers topics such as interpolation techniques, transformations, culling, clipping, animation techniques, and the 2D viewing pipeline.

CS 225: Advanced C/C++

Credits 3
This course builds on the foundation created in the first two high-level programming courses (CS 120 and CS 170). It presents advanced topics of the C/C++ programming language in greater detail. Such topics include advanced pointer manipulation, utilizing multi-dimensional arrays, complex declarations, and standard library functions. Advanced C++ topics include class and function templates, operator overloading, multiple inheritance, runtime type information, the standard template library, and performance issues.

CS 230: Game Implementation Techniques

Credits 3
This presents game implementation techniques and engine architecture. Students investigate foundational concepts of game architecture, such as game-system component separation and game flow, while learning about essential elements such as the game state manager, input/output handler, and frame rate controller. This course introduces Windows programming, state machines, and collision detection algorithms, which students will integrate into their own remakes of classic games. As part of their implementation, students create and expand their own collision, vector, and matrix libraries, enabling them to incorporate basic physics engines. Students survey concepts in space partitioning, particle systems, map editors, and other elements as a bridge to more advanced concepts in implementation techniques and engine architecture.

CS 250: Computer Graphics II

Credits 3
This course examines the mathematical elements and algorithms used in the design and development of real-time 3D computer graphics applications, such as games, cockpit simulators, and architectural walk-throughs. 3D computer graphics involve drawing pictures of 3D objects, usually on a 2D screen. This process of generating a 2D image of a 3D graphics application can be described as a series of distinct operations performed on a set of input data. Each operation generates results for the successive one. This process is called the graphics rendering pipeline, and it is the core of real-time computer graphics. The graphics pipeline can be conceptualized as consisting of three stages: application, transformation, and rasterization. The course begins by introducing the 3D graphics pipeline. The application stage is examined from the viewpoint of the representation, modeling, and animation of 3D objects. Topics include user interaction, camera animation techniques, simulation of dynamic objects, and collision detection techniques. Next, the course examines the process of mapping 3D graphic objects from model-space to viewport coordinates. The transformation stage implements this process. Finally, the conversion of a geometric primitive in viewport coordinates into a 2D image is studied. The rasterization stage implements this final process.

CS 260: Computer Networks I: Interprocess Communication

Credits 3
This course introduces the hierarchical network communication in a distributed computing environment.n Course topics cover network technologies, architecture, and protocols. The curriculum gives specific emphasis to the TCP/ IP stack and in making students familiar with writing portable socket-based software. It prepares students for programming multiplayer games in later semesters.

CS 280: Data Structures

Credits 3
This course introduces classical abstract data types (ADT) in computer science. ADTs provide the hierarchical views of data organization used in programming. Among the topics covered are the algorithms and primitives of the data structures for arrays, linked lists, stacks, queues, trees, hash tables, and graphs. In addition, the course provides an introduction to algorithm complexity and notation.

CS 300: Advanced Computer Graphics I

Credits 3
This course introduces students to algorithms that are essential to creating photorealistic images in interactive simulations. Topics covered include an overview of modern GPU (graphics processor unit) architecture and the common graphics APIs used, including OpenGL and DirectX. Rendering techniques covered include texturing, illumination models, transparency, shading algorithms, mapping techniques (bump mapping, environment/reflection mapping, etc.), and shadows. Students learn how-to implement all algorithms by using vertex and pixel shaders.

CS 315: Low-Level Programming

Credits 3
This course introduces modern microprocessor architectures. Topic areas include computer architecture, modern assembly languages, and writing assembly-language programs.n Emphasis is placed on using assembly language to optimize high-level language programs.

CS 325: User Interface and User Experience Design

Credits 3
This course presents fundamental topics in the field of human-computer interface design. Topics covered in the course will help students understand human capabilities, design principles, prototyping techniques and evaluation methods for human-computer interfaces, with special emphasis on natural user interfaces. The course will guide the students towards an implementation of a novel user interaction.

CS 330: Algorithm Analysis

Credits 3
This course provides students with an introduction to the analysis of algorithms, specifically proving their correctness and making a statement about their efficiency. Topics for discussion may include loop invariants, strong mathematical induction and recursion, asymptotic notation, recurrence relations, and generating functions. Students examine examples of algorithm analysis from searching and sorting algorithms.

CS 350: Advanced Computer Graphics II

Credits 3
This course deals with the efficient representation and processing of complex 3D scenes in order to avoid bottlenecks in the use of the CPU and the GPU. Specific topics include a variety of spatial data structures (binary space-partitioning trees, octrees, kd-trees, and grid data structures), several object-culling methods (occlusion, viewport, and portal), and finally the construction and uses of bounding volumes and their hierarchies for collision detection and related geometric operations.

CS 365: Software Engineering

Credits 3
This course covers a wide range of topics in software engineering from the practical standpoint. It encompasses project management issues as well as technical development principles and methods. Topics include system architecture, security, methodologies and notation, UML, object-oriented analysis and design, requirements analysis, implementation, verification, validation, maintenance, and software engineering standards. Risk management and iterative design receive special emphasis. Student teams apply acquired knowledge to a substantial project.

CS 380: Artificial Intelligence for Games

Credits 3
This course introduces students to a wide range of concepts and practical algorithms that are commonly used to solve game AI problems. Case studies from real games are used to illustrate the concepts. Students have a chance to work with and implement core game AI algorithms. Topics covered include the game AI programmer mindset, AI architecture (state machines, rule-based systems, goal-based systems, trigger systems, smart terrain, scripting, message passing, and debugging AI), movement, pathfinding, emergent behavior, agent awareness, agent cooperation, terrain analysis, planning, and learning/adaptation.

CS 388: Introduction to Portable Game System Development

Credits 3
This course introduces students to portable game systems programming and development, which is different from PC programming and development due to the embedded structure of the machine. Students work with a very limited amount of memory and CPU power. To overcome the system'92s memory limitations, several graphics techniques are used, such as tile-based game objects and backgrounds using color palettes. As for the CPU limitations, fixed point decimal is used instead of float numbers, along with asynchronous operations. Several portable game system specific topics, such as managing multiple graphics engines simultaneously and handling the touch pad are discussed.

CS 399: Special Topics in Computer Science

Credits 3
The content of this course may change each time it is offered.n It is for the purpose of offering a new or specialized course of interest to the faculty and students that is not covered by the courses in the current catalog.

CS 460: Advanced Animation and Modeling

Credits 3
3D animation and modeling play significant roles in computer simulation and video game software. Game developers need to have a comprehensive understanding of these techniques. This course introduces algorithms for specifying and generating motion for graphical objects. It addresses practical issues, surveys accessible techniques, and provides straightforward implementations for controlling 3D moving entities with different characteristics. The class covers two broad categories. Students will first learn an interpolation-based technique, which allows programmers to fill in the details of the motion or shape once the animator specifies certain basic information, such as keyframes, paths, coordinate grids, or destination geometry. Then, they learn a behavior-based technique, which generates motion that satisfies a set of rules, such as kinematics, physics, or other constraints.