Ваша емаил адреса неће бити објављена. Обавезна поља су означена *
#инцлуде
#инцлуде
#инцлуде
#инцлуде
#дефине СЦРЕЕН_ВИДТХ 128 // ОЛЕД ширина приказа, у пикселима
#дефине СЦРЕЕН_ХЕИГХТ 64 // ОЛЕД висина приказа, у пикселима
#дефине ОЛЕД_РЕСЕТ 4 // Ресет пин # (или -1 ако делите Ардуино ресет пин)
Адафруит_ССД1306 дисплеј (СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ, & Вире, ОЛЕД_РЕСЕТ); // Изјава за ССД1306 дисплеј спојен на И2Ц (СДА, СЦЛ пинови)
инт резолуција [2] = {СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ}
, лопта [2] = {20, (резолуција [1] / 2)};
цонст инт ПИКСЕЛ_СИЗЕ = 8
, ВАЛЛ_ВИДТХ = 4
, ПАДДЛЕ_ВИДТХ = 4
, БАЛЛ_СИЗЕ = 4
, СПЕЕД = 3;
инт плаиерСцоре = 0
, аиСцоре = 0
, плаиерПос = 0
, аиПос = 0;
цхар баллДирецтионХори = 'Р'
, баллДирецтионВерти = 'С';
боолеан инПрогресс = тачно;
// Прототипо дас фунцоес
воид мовеПлаиер ();
воид мовеАи ();
неважећи резултат ();
неважећи ерасеСцоре ();
воид дравНет ();
воид дравПикел (инт посКс, инт посИ, инт димензије);
воид ерасеПикел (инт посКс, инт посИ, инт димензије);
воид дравПлаиерПаддле (инт ред);
воид ерасеПлаиерПаддле (инт ред);
воид дравАиПаддле (инт ред);
воид ерасеАиПаддле (инт ред);
воид дравБалл (инт к, инт и);
воид ерасеБалл (инт к, инт и);
воид сетуп () {
Сериал.бегин (9600);
// ССД1306_СВИТЦХЦАПВЦЦ = генерира интерни напон од 3.3В
иф (! дисплаи.бегин (ССД1306_СВИТЦХЦАПВЦЦ, 0к3Ц)) {// Адреса 0к3Д за 128к64
Сериал.принтлн (Ф ("издвајање ССД1306 није успело"));
за (;;); // Не настављајте, петљајте заувек
}
дисплаи.дисплаи ();
кашњење (2000); // Паузирајте 2 секунде
// Обришите тампон
дисплаи.цлеарДисплаи ();
}
воид лооп () {
ако (аиСцоре> 3 || плаиерСцоре> 3) {// провјери стање игре
инПрогресс = лажно;
// неко је победио
дисплаи.цлеарДисплаи ();
дисплаи.сетТектСизе (4);
дисплаи.сетТектЦолор (ВХИТЕ);
дисплаи.сетЦурсор (0, 0); // схватити ко
ако (аиСцоре> плаиерСцоре)
дисплаи.принтлн ("ГУБИТЕ!");
друго ако (плаиерСцоре> аиСцоре)
дисплаи.принтлн ("ДОБИТИШ!");
}
ако (инПрогресс) {
ерасеСцоре ();
ерасеБалл (лопта [0], лопта [1]);
иф (баллДирецтионВерти == 'У') // помицање лопте дијагонално
лопта [1] = лопта [1] - ХИТРОСТ;
иф (баллДирецтионВерти == 'Д') // помицање лопте дијагонално
лопта [1] = лопта [1] + БРЗИНА;
ако (лопта [1] = резолуција [1]) // одбије лопту са дна
баллДирецтионВерти = 'У';
ако (баллДирецтионХори == 'Р') {
лопта [0] = лопта [0] + БРЗИНА; // покретна лопта
ако је (лопта [0]> = (резолуција [0] - 6)) {// лопта је на АИ ивици екрана
ако је ((аиПос + 12)> = лопта [1] && (аиПос - 12) (аиПос + 2)) // одбаци лоптицу
баллДирецтионВерти = 'Д';
елсе иф (лопта [1] баллДирецтионВерти = 'У';
друго // одбити лопту право
баллДирецтионВерти = 'С';
баллДирецтионХори = 'Л'; // променити смер куглице
} елсе {// ЦИЉ!
лопта [0] = 6; // преместити лоптицу на другу страну екрана
баллДирецтионВерти = 'С'; // ресетирајте лопту на равно кретање
лопта [1] = резолуција [1] / 2; // померање лопте на средину екрана
++ плаиерСцоре; // повећати резултат играча
}
}
}
иф (баллДирецтионХори == 'Л') {
лопта [0] = лопта [0] - БРЗИНА; // покретна лопта
иф (лопта [0] = лопта [1] && (плаиерПос - 12) (плаиерПос + 2)) // одбаци лоптицу
баллДирецтионВерти = 'Д';
друго ако (лопта [1] аиПос)
++ аиПос;
друго ако (лопта [1] --аиПос;
дравАиПаддле (аиПос);
}
воид дравСцоре () {// Извлачи АИ и резултате играча
дисплаи.сетТектСизе (2);
дисплаи.сетТектЦолор (ВХИТЕ);
дисплаи.сетЦурсор (45, 0);
дисплаи.принтлн (плаиерСцоре);
дисплаи.сетЦурсор (75, 0);
дисплаи.принтлн (аиСцоре);
}
воид ерасеСцоре () {// Брисање АИ и резултати играча
дисплаи.сетТектСизе (2);
дисплаи.сетТектЦолор (БЛАЦК);
дисплаи.сетЦурсор (45, 0);
дисплаи.принтлн (плаиерСцоре);
дисплаи.сетЦурсор (75, 0);
дисплаи.принтлн (аиСцоре);
}
воид дравНет () {// Нацртај линијско поље
фор (инт и = 0; и дравПикел (((резолуција [0] / 2) - 1), и * (ВАЛЛ_ВИДТХ) + (ВАЛЛ_ВИДТХ * и), ВАЛЛ_ВИДТХ);
}
воид дравПикел (инт посКс, инт посИ, инт димензије) {// Нацртај групу пиксела
за (инт к = 0; к за (инт и = 0; и дисплаи.дравПикел ((посКс + к), (посИ + и), ВХИТЕ);
}
воид ерасеПикел (инт посКс, инт посИ, инт димензије) {// Брисање групе пиксела
за (инт к = 0; к за (инт и = 0; и дисплаи.дравПикел ((посКс + к), (посИ + и), ЦРНО);
}
воид дравПлаиерПаддле (инт ред) {
дравПикел (0, ред - (ПАДДЛЕ_ВИДТХ * 2), ПАДДЛЕ_ВИДТХ);
дравПикел (0, ред - ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
дравПикел (0, ред, ПАДДЛЕ_ВИДТХ);
дравПикел (0, ред + ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
дравПикел (0, ред + (ПАДДЛЕ_ВИДТХ + 2), ПАДДЛЕ_ВИДТХ);
}
воид ерасеПлаиерПаддле (инт ред) {
ерасеПикел (0, ред - (ПАДДЛЕ_ВИДТХ * 2), ПАДДЛЕ_ВИДТХ);
ерасеПикел (0, ред - ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
ерасеПикел (0, ред, ПАДДЛЕ_ВИДТХ);
ерасеПикел (0, ред + ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
ерасеПикел (0, ред + (ПАДДЛЕ_ВИДТХ + 2), ПАДДЛЕ_ВИДТХ);
}
воид дравАиПаддле (инт ред) {
инт колона = резолуција [0] - ПАДДЛЕ_ВИДТХ;
дравПикел (колона, ред - (ПАДДЛЕ_ВИДТХ * 2), ПАДДЛЕ_ВИДТХ);
дравПикел (колона, ред - ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
дравПикел (колона, ред, ПАДДЛЕ_ВИДТХ);
дравПикел (колона, ред + ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
дравПикел (колона, ред + (ПАДДЛЕ_ВИДТХ * 2), ПАДДЛЕ_ВИДТХ);
}
воид ерасеАиПаддле (инт ред) {
инт колона = резолуција [0] - ПАДДЛЕ_ВИДТХ;
ерасеПикел (колона, ред - (ПАДДЛЕ_ВИДТХ * 2), ПАДДЛЕ_ВИДТХ);
ерасеПикел (колона, ред - ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
ерасеПикел (колона, ред, ПАДДЛЕ_ВИДТХ);
ерасеПикел (колона, ред + ПАДДЛЕ_ВИДТХ, ПАДДЛЕ_ВИДТХ);
ерасеПикел (колона, ред + (ПАДДЛЕ_ВИДТХ * 2), ПАДДЛЕ_ВИДТХ);
}
воид дравБалл (инт к, инт и) {
дисплаи.дравЦирцле (к, и, БАЛЛ_СИЗЕ, ВХИТЕ);
}
воид ерасеБалл (инт к, инт и) {
дисплаи.дравЦирцле (к, и, БАЛЛ_СИЗЕ, БЛАЦК);
}