февраль 13, 2022

Checker10L by Roberto Capuano

Добавить в
Мои игры
Торрент
Скачать

# Checker10L

Checker10L — это реализация на MSX2 BASIC классической игры в шашку: итальянская дама.

Реализованы все классические правила: ход, захват и повышение до короля.

Игра была вдохновлена ​​[1K ZX Chess](https://en.wikipedia.org/wiki/1K_ZX_Chess) и хотелось бы отдать ей небольшую дань уважения.

# элементов управления

- Клавиши курсора для перемещения курсора.

- Пробел для выбора фрагмента

- Пробел для перемещения выделенной фигуры.

Когда фигура достигает самого дальнего ряда, она становится королем.

Символы:

- `.` пустая ячейка

- `o` пользовательская часть

- `q` король пользователей

- Фигура противника `O`

- `Q` король противника

Исходники хранятся по адресу: https://github.com/robertocapuano/Checker10L

# источник

1 экран1,0,0:COLOR1,14,14:KEYOFF::DEFINTA-Z:B=6348:R=RND(-TIME):P(0)=46:P(1)=111:P(2) =79:P(5)=113:P(6)=81:B2=B+32*9:CLS:P1=0:P2=0:forJ=0to7:vpokeB-2+J*32,56-J :vpokeB2+J,97+J:forI=0to7:CK(I,J)=(1-(I+J)mod2)*(-1*(I<3)-2*(I>4)): следующийI,J: 10 forJ=0to7:forI=0to7:vpoke B+32*(J)+I,P(CK(7-J,I)):nextI,J:gosub150:Q=(CK(R,C)and4): если (CK(R,C)and1)=0, то 10:иначе R0=R:C0=C:GOSUB150:if(R=R0+1или (Q=4 и R=R0-1)) и abs(C0- C)=1 и CK(R,C)=0, тогда CK(R,C)=(CK(R0,C0)или(4*(-1*(R=7)))):CK(R0,C0 )=0:перейти к60 20 CE=CK((R+R0)/2,(C+C0)/2):if(Q=0andR<>R0+2)orabs(R-R0)<>2orabs(C0-C)<>2orCK (R,C)<>0or(CE and2)<>2orQ<(CEand4)then C=C0:R=R0:goto10:else:CK((R+R0)/2,(C+C0)/2)= 0:CK(R,C)=(CK(R0,C0)или(4*(-1*(R=7)))):CK(R0,C0)=0:P1=P1+1: vpokeB2+95+P1,p(CE):гудок:еслиP1=12то1 60 AX=0:AI=0:DU=RND(1)*7:DV=RND(1)*7:forJ=0to7:forI=0to7:vpoke B+32*(J)+I,P(CK( 7-J,I)):nextI,J: forJ=0to7:U=(J+DU)mod8:forI=0to7:V=(I+DV)mod8:Q=CK(U,V)and4:forK= -1to1 шаг 2:forL=-1to(-(Q=4))шаг2:if(L=-1 и U<2)или(L=1иU>5)или(CK(U,V)and2)<> 2 тогда70 65 D=-(V<2)++(V>5)+(V>1)*(V<6)*K:T=-(U<2)++(U>5)+(U> 1)*(U<6)*L:CE=CK(U+T,V+D):if(CEand1)=1 и Q>=(CEand4) и CK(U+2*T,V+2*D )=0, то CK(U+2*T,V+2*D)=(CK(U,V)or(4*(-1*((U+2*T)=0)))):CK (U,V)=0:CK(U+T,V+D)=0:I=7:J=7:K=1:AI=1:vpokeB-96+P2,p(1):P2= P2+1: звуковой сигнал 70 nextL,K,I,J:если P2=12, то 1, иначе, если AI=1, то 10 71 S=SGN(RND(1)-.5):forJ=0to7:U=(J+DU)mod8:forI=0to7:V=(I+DV)mod8:Q=(CK(U,V)and4 ):forK=-StoS шаг S*2:forL=-StoSstep2*S: if (Q=0 и L=1) или (L=-1 и U=0) или (L=1 и U=7) или (CK(U,V)and2)<>2 then75:else D= -(V<1) + +(V>6) + (V>0) * (V<7)*K: T= L: 73 NU=U+2*T:NV=V+2*D:BC=(NU>=0andNU<8)and(NV>=0andNV<8)and(AX=0):if CK(U+T, V+D)=0 и ((CK( U+2*T* -BC, V+2*D* -BC)и 1) =0), тогда CK(U+T,V+D)=(CK( U,V)или(4*(-1*((U+T)=0)))):CK(U,V)=0:K=11: AI = 1: J=7:I=7: К=1:Л=1 75 далее L,K,I,J:если AI=1, то 10:иначе, если AX=0, то AX=1: goto71: else1 150 LOCATE10+C,13-R:k$=INPUT$(1):K=ASC(K$):if K=32then return: else if K=30andr<7thenR=R+1:goto150:elseifK=31andR> 0thenR=R-1:goto150:elseifK=28andC<7thenC=C+1:goto150;elseifK=29andC>0thenC=C-1:GOTO150:ELSE150

# Описание источника

``` 1 экран1,0,0:COLOR1,14,14:KEYOFF::DEFINTA-Z:B=6348:R=RND(-TIME):P(0)=46:P(1)=111:P(2)=79:P(5)=113:P(6)=81 :B2=B+32*9:CLS:P1=0:P2=0:forJ=0to7:vpokeB-2+J*32,56-J:vpokeB2+J,97+J:forI=0to7:CK(I ,J)=(1-(I+J)mod2)*(-1*(I<3)-2*(I>4)):nextI,J: ``` - screen1,0,0: установить текстовый режим 32x24. - ЦВЕТ1,14,14: черный на сером. - KEYOFF: скрыть функциональные клавиши. - CLS: чистый экран - DEFINTA-Z: использовать целочисленные переменные. - B=6347: база кадрового буфера. - R=RND(-TIME): инициализация генератора случайных чисел - P(0)=46:P(1)=111:P(2)=79:P(5)=113:P(6)=81 штук кодов ASCII - B2=B+32*9 нижняя часть доски - P1=0:P2=0: очки игроков - :forJ=0to7:vpokeB-2+J*32,56-J:vpokeB2+J,97+J:forI=0to7:CK(I,J)=(1-(I+J)mod2)*(- 1*(I<3)-2*(I>4)):nextI,J: нарисовать шахматную доску ``` 10 forJ=0to7:forI=0to7:vpoke B+32*(J)+I,P(CK(7-J,I)):nextI,J:gosub150:Q=(CK(R,C)and4): если (CK(R,C)and1)=0, то 10:иначе R0=R:C0=C:GOSUB150:if(R=R0+1или (Q=4 и R=R0-1)) и abs(C0- C)=1 и CK(R,C)=0, тогда CK(R,C)=(CK(R0,C0)или(4*(-1*(R=7)))):CK(R0,C0 )=0:перейти к60 ``` - forJ=0to7:forI=0to7:vpoke B+32*(J)+I,P(CK(7-J,I)):nextI,J вытягиваем детали - gosub150 читает ввод пользователя - Q=(CK(R,C)and4): переместить пользовательский курсор. - если (CK(R,C)and1)=0, то 10: проверить, содержит ли ячейка пользовательский фрагмент - R0=R:C0=C:GOSUB150: сохранить начальную позицию и прочитать конечную позицию детали. - if(R=R0+1or(Q=4 и R=R0-1)) и abs(C0-C)=1 и CK(R,C)=0 проверяем, правильный ли это ход - CK(R,C)=(CK(R0,C0)or(4*(-1*(R=7)))):CK(R0,C0)=0:goto60 переместить пользовательскую фигуру ``` 20 CE=CK((R+R0)/2,(C+C0)/2):if(Q=0andR<>R0+2)orabs(R-R0)<>2orabs(C0-C)<>2orCK(R,C)<>0or(CE and2)<>2orQ<(CEand4)then C=C0:R=R0:goto10:else:CK((R+R0) /2,(C+C0)/2)=0:CK(R,C)=(CK(R0,C0)или(4*(-1*(R=7)))):CK(R0,C0 )=0:P1=P1+1:vpokeB2+95+P1,p(CE):гудок:еслиP1=12то1 ``` - CE=CK((R+R0)/2,(C+C0)/2): получить ячейку в середине перемещения пользователя. - (Q=0andR<>R0+2) проверить, сделал ли пользователь простой ход (1 ячейка) - abs(R-R0)<>2 или abs(C0-C)<>2 или CK(R,C)<>0 или (CE and2)<>2 или Q<(CEand4) проверяет, захватывает ли пользователь фигура противника - C=C0:R=R0:goto10 в случае, если перемещение незаконно, перезапустите выбор пользователя. - CK((R+R0)/2,(C+C0)/2)=0: выполнен действительный захват. - CK(R,C)=(CK(R0,C0)or(4*(-1*(R=7)))):CK(R0,C0)=0: фигура перемещается - P1=P1+1:vpokeB2+95+P1,p(CE):гудок: очки пользователя увеличены - ifP1=12then1, если пользователь захватил все 12 фигур, игра перезапускается. ``` 60 AX=0:AI=0:DU=RND(1)*7:DV=RND(1)*7:forJ=0to7:forI=0to7:vpoke B+32*(J)+I,P(CK( 7-J,I)):nextI,J: forJ=0to7:U=(J+DU)mod8:forI=0to7:V=(I+DV)mod8:Q=CK(U,V)and4:forK= -1to1 шаг 2:forL=-1to(-(Q=4))шаг2:if(L=-1 и U<2)или(L=1иU>5)или(CK(U,V)and2)<> 2 тогда70 ``` - AX=0: флаг, определяющий любое движение. - AI=0: здесь начинается логика противника, так как в первую очередь мы пытаемся захватить - DU=RND(1)*7:DV=RND(1)*7: выбрать случайное начальное направление - forJ=0to7:forI=0to7:vpoke B+32*(J)+I,P(CK(7-J,I)):nextI,J: обновить шахматную доску - forJ=0to7:U=(J+DU)mod8:forI=0to7: начать сканирование шахматной доски - V=(I+DV)mod8:Q=CK(U,V)and4: получить следующую ячейку - forK=-1to1 шаг 2: проверьте левый/правый каталогдействие - forL=-1to(-(Q=4))step2: проверка направления вперед/назад (только если фигура – ​​король) - if(L=-1 и U<2) или (L=1andU>5) или (CK(U,V)and2)<>2 then70 Проверьте, может ли фигура двигаться ``` 65 D=-(V<2)++(V>5)+(V>1)*(V<6)*K:T=-(U<2)++(U>5)+(U> 1)*(U<6)*L:CE=CK(U+T,V+D):if(CEand1)=1 и Q>=(CEand4) и CK(U+2*T,V+2*D )=0, то CK(U+2*T,V+2*D)=(CK(U,V)or(4*(-1*((U+2*T)=0)))):CK (U,V)=0:CK(U+T,V+D)=0:I=7:J=7:K=1:AI=1:vpokeB-96+P2,p(1):P2= P2+1: звуковой сигнал ``` - D=-(V<2)++(V>5)+(V>1)*(V<6)*K: смещение строк - T=-(U<2)++(U>5)+(U>1)*(U<6)*L: смещение столбцов - CE=CK(U+T,V+D): содержимое ячейки - if(CEand1)=1and Q>=(CEand4) и CK(U+2*T,V+2*D)=0 проверяем, может ли точка перемещаться - CK(U+2*T,V+2*D)=(CK(U,V)or(4*(-1*((U+2*T)=0)))) ход фигуры - CK(U,V)=0:CK(U+T,V+D)=0: очистить предыдущую ячейку - I=7:J=7:K=1:AI=1:vpokeB-96+P2,p(1):P2=P2+1:звуковой сигнал, фрагмент пользователя был захвачен ``` 70 nextL,K,I,J:если P2=12, то 1, иначе, если AI=1, то 10 ``` - nextL,K,I,J: замкнутый цикл - если P2=12 ... если противник захватил все фигуры, игра возобновляется. ``` 71 S=SGN(RND(1)-.5):forJ=0to7:U=(J+DU)mod8:forI=0to7:V=(I+DV)mod8:Q=(CK(U,V)and4 ):forK=-StoS шаг S*2:forL=-StoSstep2*S: if (Q=0 и L=1) или (L=-1 и U=0) или (L=1 и U=7) или (CK(U,V)and2)<>2 then75:else D= -(V<1) + +(V>6) + (V>0) * (V<7)*K: T= L: ``` - S=SGN(RND(1)-.5): захвата нет, ИИ пытается двигаться в случайном направлении. - forJ=0to7:U=(J+DU)mod8:forI=0to7:V=(I+DV)mod8: сканировать все ячейки - Q=(CK(U,V)и4): чел.я доволен - forK=-StoS шаг S*2:forL=-StoSstep2*S: соседняя строка/столбец - if (Q=0 и L=1), если ячейка пуста или находится на краю - (L=-1 и U=0) возле границы шахматной доски - (L=1 и U=7) возле границы шахматной доски - (CK(U,V)and2)<>2: содержимое ячейки - D= -(V<1) + +(V>6) + (V>0) * (V<7)*K: T= L: выбрать следующую ячейку ``` 73 NU=U+2*T:NV=V+2*D:BC=(NU>=0andNU<8)and(NV>=0andNV<8)and(AX=0):if CK(U+T, V+D)=0 и ((CK( U+2*T* -BC, V+2*D* -BC)и 1) =0), тогда CK(U+T,V+D)=(CK( U,V)или(4*(-1*((U+T)=0)))):CK(U,V)=0:K=11: AI = 1: J=7:I=7: К=1:Л=1 ``` - NU=U+2*T:NV=V+2*D:BC=(NU>=0andNU<8)and(NV>=0andNV<8)and(AX=0) проверяют, может ли фигура в следующей позиции быть схваченным - если CK(U+T,V+D)=0, если следующая ячейка свободна, сделайте ход - CK(U+T,V+D)=(CK(U,V)or(4*(-1*((U+T)=0)))):CK(U,V)=0: переместить кусок - K=11: AI = 1: J=7:I=7:K=1:L=1: конец цикла ``` 75 далее L,K,I,J:если AI=1, то 10:иначе, если AX=0, то AX=1: goto71: else1 ``` - тай-брейк: в случае, если ИИ не может сделать правильный ход ``` 150 LOCATE10+C,13-R:k$=INPUT$(1):K=ASC(K$):if K=32then return: else if K=30andr<7thenR=R+1:goto150:elseifK=31andR> 0thenR=R-1:goto150:elseifK=28andC<7thenC=C+1:goto150;elseifK=29andC>0thenC=C-1:GOTO150:ELSE150 ``` - прочитать ввод пользователя

Как скачать Checker10L by Roberto Capuano через торрент

Всего несколько простых шагов:

  • Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
  • Выбираем и скачиваем подходящий торрент-файл репака Checker10L by Roberto Capuano
  • Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
  • После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!